У меня есть активность, в которой размещаются два фрагмента. Действие начинается с отображения загрузчика при загрузке объекта. Загруженный объект затем передается обоим фрагментам в качестве аргументов с помощью методов newInstance и прикрепляются эти фрагменты.
final FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.container1, Fragment1.newInstance(loadedObject));
trans.replace(R.id.container2, Fragment2.newInstance(loadedObject));
trans.commit();
Второй фрагмент содержит android.support.v4.view.ViewPager и вкладки. onResume мы инициализируем его следующим образом
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(adapter.getCount()); //the count is always < 4
tabLayout.setupWithViewPager(viewPager);
Проблема в том, что андроид затем бросает
java.lang.IllegalStateException: FragmentManager уже выполняет транзакции
С этой трассировкой стека: (я взял android.support
из имен пакетов только для краткости)
v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1620) в v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637) в v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) в v4.view.ViewPager.populate(ViewPager.java:1235) в v4.view.ViewPager.populate(ViewPager.java:1083) в v4.view.ViewPager.setOffscreenPageLimit(ViewPager.java:847)
Данные показывают, если setOffscreenPageLimit(...);
удален. Есть ли другой способ избежать этой проблемы?
Когда в жизненном цикле завершена транзакция фрагмента, так что я могу подождать, чтобы настроить мой пейджер?