我有一个托管两个片段的活动。该活动在加载对象时开始显示加载程序。然后通过 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);
问题是android然后抛出
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(...);
是否被移除。有没有其他方法可以避免这个问题?
在生命周期中,片段事务何时完成,以便我可以等待设置寻呼机?
原文由 Nick Cardoso 发布,翻译遵循 CC BY-SA 4.0 许可协议
只需将
childFragmentManger()
用于viewpager
在Fragment