Viewpager“ViewGroup”更改背景颜色运行时

时间:2017-06-29 00:19:12

标签: java android android-viewgroup

我有一个简单的viewpager,只有几个视图。 我在每个视图中都有一个按钮,一旦点击它就应该将视图的背景颜色更改为预定的颜色。

在我的instantiateItem中,我有以下内容:

public CustomPagerAdapter(Context context) {
    mContext = context;
}

@Override
public Object instantiateItem(ViewGroup collection, int position) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.child_item, collection, false);

    PopulateView(position);
    collection.addView(layout);
    return layout;
}

我有另一个函数(populateView)负责绘制我的视图并创建按钮。

我正在考虑将“ViewGroup layout”的实例作为类变量使用并使用它,但单击视图1中的按钮会导致随机视图(比如视图2)的背景颜色发生变化。

所以我保留了“ViewGroup集合”的副本并使用了

collection.getChildAt(position).setBackgroundColor(mContext.getResources().getColor(sky));

但是应用程序会因为错误而在最后一次视图颜色更改时崩溃     java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.view.View.setBackgroundColor(int)'

collection = {ViewPage@4834} "android.support.v4.view.ViewPager{e1f06a0 VFED..... ......ID 0,0-1080,1536 #7f0d0091 app:id/viewpager}"
mContext = {MainActivity@4835}
position = 2

最奇怪的是,当我查看“集合”内部,并扩展“儿童”时,只列出了2个孩子。应该有3.我无法理解为什么会这样。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

你需要给出添加孩子的位置。 See here

@Override
public Object instantiateItem(ViewGroup collection, int position) {

    .....


    collection.addView(layout, 0);
    return layout;
}