android – FragmentManager在使用方法setOffscreenPageLimit()后已经在执行事务

android – FragmentManager在使用方法setOffscreenPageLimit()后已经在执行事务,第1张

概述我有一个带有多个片段的导航抽屉,其中一个是带有两个recyclerview片段的tablayout,在导航抽屉片段之间切换后,RecyclerView项目消失了,我找到了一个解决方案,我需要使用方法setOffscreenPageLimit()和ViewPager但它给了我问题标题中提到的错误 这是我的logcat java.lang.IllegalStateException: Fragment 我有一个带有多个片段的导航抽屉,其中一个是带有两个recyclervIEw片段的tablayout,在导航抽屉片段之间切换后,RecyclerVIEw项目消失了,我找到了一个解决方案,我需要使用方法setoffscreenPagelimit()和VIEwPager但它给了我问题标题中提到的错误

这是我的logcat

java.lang.IllegalStateException: FragmentManager is already executing transactions                                                                               at androID.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1626)                                                                               at androID.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679)                                                                               at androID.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)                                                                               at androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:1240)                                                                               at androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:1088)                                                                               at androID.support.v4.vIEw.VIEwPager.setoffscreenPagelimit(VIEwPager.java:852)                                                                               at com.amir.ahmed.EELUStudentUnion.SelectionFragment.setupVIEwPager(SelectionFragment.java:59)                                                                               at com.amir.ahmed.EELUStudentUnion.SelectionFragment.onActivityCreated(SelectionFragment.java:40)                                                                               at androID.support.v4.app.Fragment.performActivityCreated(Fragment.java:2089)                                                                               at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1133)                                                                               at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1290)                                                                               at androID.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)                                                                               at androID.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)                                                                               at androID.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:536)                                                                               at androID.os.Handler.handleCallback(Handler.java:739)                                                                               at androID.os.Handler.dispatchMessage(Handler.java:95)                                                                               at androID.os.Looper.loop(Looper.java:158)                                                                               at androID.app.ActivityThread.main(ActivityThread.java:7225)                                                                               at java.lang.reflect.Method.invoke(Native Method)                                                                               at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)                                                                               at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

这是标签布局片段代码

@OverrIDepublic voID onActivityCreated(@Nullable Bundle savedInstanceState) {    super.onActivityCreated(savedInstanceState);    vIEwPager = (VIEwPager) getActivity().findVIEwByID(R.ID.vIEwpager);    setupVIEwPager(vIEwPager);    vIEwPager.setoffscreenPagelimit(2);    tabLayout = (TabLayout) getActivity().findVIEwByID(R.ID.tabs);    tabLayout.setupWithVIEwPager(vIEwPager);    setupTabIcons();}private voID setupVIEwPager(VIEwPager vIEwPager) {    VIEwPagerAdapter adapter = new VIEwPagerAdapter(getFragmentManager());    adapter.addFrag(new Courses(),"IT");    adapter.addFrag(new CoursesBussiness(),"Business");    vIEwPager.setAdapter(adapter);}
解决方法 我遇到了类似的问题,经过几个小时的研究,我发现了这个问题.
如果在Fragment中创建VIEwPager,则需要对FragmentPagerAdapter使用getChildFragmentManager(),而不是getFragmentManager().

所以你的setupVIEwPager()方法应该是这样的.

private voID setupVIEwPager(VIEwPager vIEwPager) {    VIEwPagerAdapter adapter = new VIEwPagerAdapter(getChildFragmentManager());    adapter.addFrag(new Courses(),"Business");    vIEwPager.setAdapter(adapter);}

问题的根本原因是你在Fragment中嵌入Fragments,这就是它抛出异常的原因.

java.lang.IllegalStateException: FragmentManager is already executing transactions

根据谷歌的文档:

You can Now embed fragments insIDe fragments. This is useful for a varIEty of situations in which you want to place dynamic and re-usable UI components into a UI component that is itself dynamic and re-usable. For example,if you use VIEwPager to create fragments that swipe left and right and consume a majority of the screen space,you can Now insert fragments into each fragment page. To nest a fragment,simply call getChildFragmentManager() on the Fragment in which you want to add a fragment. This returns a FragmentManager that you can use like you normally do from the top-level activity to create fragment transactions.

总结

以上是内存溢出为你收集整理的android – FragmentManager在使用方法setOffscreenPageLimit()后已经在执行事务全部内容,希望文章能够帮你解决android – FragmentManager在使用方法setOffscreenPageLimit()后已经在执行事务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1137007.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存