Viewpager ViewGroup меняет цвет фона во время выполнения

У меня есть простой просмотрщик с несколькими просмотрами. У меня есть кнопка в каждом представлении, которая после нажатия на нее должна изменить цвет фона представления на заранее определенный цвет.

В моем экземпляре Item у меня есть следующее:

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» в качестве переменной класса и использовать его, но нажатие кнопки в представлении 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. Я не могу понять, почему это так.

Кто-нибудь может мне помочь?


person user7459730    schedule 29.06.2017    source источник


Ответы (1)


Ну, вам нужно указать позицию, на которую нужно добавить ребенка. см. здесь

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

    .....


    collection.addView(layout, 0);
    return layout;
}
person Ibrokhimjon Saydakhmatov    schedule 29.06.2017