У меня есть viewpager в действии. Я загружая его, как этотМой адаптер получает нуль
ArrayList<Fragment> arrayListFragment = new ArrayList<>();
Fragment first = Fragment.instantiate(MainActivity.this, MainActivityFragment.class.getName());
Fragment second = Fragment.instantiate(MainActivity.this, SecondFragment.class.getName());
arrayListFragment.add(first);
arrayListFragment.add(second);
Log.d(TAG, "Pager created " + second);
mPagerAdapter = new SwipeScreenPagerAdapter(getSupportFragmentManager(),
arrayListFragment, pageTitles); //This is custom adapter
И В onCreateView() из SecondFragment Я этот журнал:
mAdapter = new CustomAdapter(mContext, null, mList);
Log.d(TAG, "Initialised adapter " + this);
Все отлично работает, когда я запустить приложение. Интересная вещь возникает, когда я помещаю приложение в фоновом режиме, а затем возобновляю его через некоторое время. Действие перезапускается, и viewpager снова инициализируется, и по какой-то причине Log.d(TAG, "Pager created " + second);
и Log.d(TAG, "Initialised adapter " + this);
операторы печатают фрагмент с различными идентификаторами. Они оба печатают один и тот же идентификатор в первом запуске, но отличаются, когда я возобновляю. И mAdapter становится нулевым при использовании в функции фрагмента (потому что эта функция вызывается на фрагмент, полученный от viewpager).
заявления журнала являются:
Pager created SecondFragment{269ef202}
Initialised adapter SecondFragment{298444fe #2 id=0x7f0e0084 android:switcher:2131624068:1}
С, где этот новый фрагмент создается? Сначала я думал, что это какое-то образом восстановить старый фрагмент, но я попытался прохождением нуля в onActivityCreate так:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(null);
}
, но он по-прежнему создает отдельный экземпляр фрагмента, а также он имеет иной идентификатор.
Есть ли причина использовать фрагменты над видами? – zgc7009
Да. Это необходимо. На самом деле, у меня есть другие способы добиться того, что я хочу сделать, но я хочу понять, почему это происходит. – crysis
Адаптеры динамические, они визуализируют и перерабатывают по мере необходимости. Когда вы нажимаете на задний план, адаптер начинает сбрасывать содержимое, потому что он видит его ненужным и будет повторно отображать его, когда вы перейдете на передний план. – zgc7009