我有一个托管两个片段的活动。该活动首先显示在加载对象时的加载器。然后,通过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.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)的v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637)的v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1620)在v4.view.ViewPager .populate(ViewPager.java:1235)at v4.view.ViewPager.populate(ViewPager.java:1083)at v4.view.ViewPager.setOffscreenPageLimit(ViewPager.java:847)
数据显示是否setOffscreenPageLimit(...);
已删除。还有另一种方法可以避免此问题?
在生命周期中何时完成碎片交易,以便我可以等待设置寻呼机?
ViewPager
会将寻呼机NullPointerException
内onCreateView
的片段内部提升为IllegalStateException : FragmentManager is already executing transactions
...以防万一有人掉下来并需要知道