FragmentManager已经在执行事务.提交后何时安全初始化寻呼机? [英] FragmentManager is already executing transactions. When is it safe to initialise pager after commit?
问题描述
我有一个托管两个片段的活动.活动开始时显示加载器,同时加载对象.然后,通过newInstance方法将加载的对象作为参数传递给两个片段,并附加这些片段.
I have an activity hosting two fragments. The activity starts off showing a loader while it loads an object. The loaded object is then passed to both fragments as arguments via newInstance methods and those fragments are attached.
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我们将其初始化如下
The second fragment contains a android.support.v4.view.ViewPager and tabs. onResume we initialise it like follows
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(adapter.getCount()); //the count is always < 4
tabLayout.setupWithViewPager(viewPager);
问题是android然后抛出
The problem is android then throws
java.lang.IllegalStateException:FragmentManager已经在执行 交易
java.lang.IllegalStateException: FragmentManager is already executing transactions
使用此堆栈跟踪:(出于简洁起见,我从软件包名称中删除了android.support
)
With this stack trace: (I took android.support
out of the package names just for brevity)
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)
v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1620) at v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637) at v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) at v4.view.ViewPager.populate(ViewPager.java:1235) at v4.view.ViewPager.populate(ViewPager.java:1083) at v4.view.ViewPager.setOffscreenPageLimit(ViewPager.java:847)
数据显示是否删除了setOffscreenPageLimit(...);
.还有另一种方法可以避免此问题?
The data shows if setOffscreenPageLimit(...);
is removed. Is there another way to avoid this issue?
片段生命周期中的事务何时完成,以便我可以等待设置寻呼机?
When in the lifecycle is the fragment transaction complete so that I can wait to setup my pager?
推荐答案
如果您定位的是sdk 24及更高版本,则可以使用:
If you're targeting sdk 24 and above you can use:
FragmentTransaction.commitNow()
而不是commit()
如果您要定位较早的版本,请尝试致电:
If you're targeting older versions, try calling:
FragmentManager.executePendingTransactions()
呼叫commit()
这篇关于FragmentManager已经在执行事务.提交后何时安全初始化寻呼机?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!