android - FragmentManager 已经在执行事务。提交后何时初始化寻呼机是安全的?

标签 android android-fragments

我有一个托管两个 fragment 的 Activity 。该 Activity 在加载对象时开始显示加载程序。然后通过 newInstance 方法将加载的对象作为参数传递给两个 fragment ,并附加这些 fragment 。

final FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.container1, Fragment1.newInstance(loadedObject));
trans.replace(R.id.container2, Fragment2.newInstance(loadedObject));
trans.commit();

第二个 fragment 包含一个 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 is already executing transactions

使用此堆栈跟踪:(为了简洁起见,我将 android.support 从包名称中取出)

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(...); 是否被移除。有没有其他方法可以避免这个问题?

在生命周期中, fragment 事务何时完成以便我可以等待设置寻呼机?

最佳答案

只需在 Fragment

中将 childFragmentManger() 用于 viewpager
mPagerAdapter = new ScreenSlidePagerAdapter(getChildFragmentManager());
mPager.setAdapter(mPagerAdapter);

关于android - FragmentManager 已经在执行事务。提交后何时初始化寻呼机是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38722325/

相关文章:

android - Google+ 登录 onConnected 未调用

android - 我正在寻找缺少 proguard.cfg 的 default.properties 文件

在 fragment 中重新打开时,android maps v2 崩溃

android - 在 PopBackStack 上保留数据

java - 从 Fragment Force 启动 Activity 会关闭应用程序

android - Action Bar UP 导航 Activity 到 Fragment

android - 如何为 subview 设置动画并让父 View 自动调整大小?

android - 从 RecyclerView 单击 CardView 加载 fragment

java - 发送 Intent 对象

android - 如何像 Theme.AppCompat.Light.DarkActionBar 一样设置 appcompat-v7 工具栏的样式?