我有一个简单的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.我无法理解为什么会这样。
有人可以帮帮我吗?
答案 0 :(得分:0)
你需要给出添加孩子的位置。 See here
@Override
public Object instantiateItem(ViewGroup collection, int position) {
.....
collection.addView(layout, 0);
return layout;
}