ViewPager:递归进入executePendingTransactions

bro*_*wep 47 android android-3.0-honeycomb

我在ViewPager中有一个ViewPager,我得到了这个例外

09-07 18:30:26.392: ERROR/AndroidRuntime(841): FATAL EXCEPTION: main
    java.lang.IllegalStateException: Recursive entry to executePendingTransactions
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1331)
    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:422)
    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:86)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:453)
    at android.support.v4.view.ViewPager.onAttachedToWindow(ViewPager.java:563)
    at android.view.View.dispatchAttachedToWindow(View.java:7974)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1857)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)
    at android.view.ViewGroup.addViewInner(ViewGroup.java:2968)
    at android.view.ViewGroup.addView(ViewGroup.java:2824)
    at android.support.v4.view.ViewPager.addView(ViewPager.java:537)
    at android.view.ViewGroup.addView(ViewGroup.java:2781)
    at android.view.ViewGroup.addView(ViewGroup.java:2761)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:848)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1041)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:616)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1359)
    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:422)
    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:86)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:453)
    at android.support.v4.view.ViewPager.onAttachedToWindow(ViewPager.java:563)
    at android.view.View.dispatchAttachedToWindow(View.java:7974)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1857)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)
    at android.view.ViewRoot.performTraversals(ViewRoot.java:726)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1944)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:126)
    at android.app.ActivityThread.main(ActivityThread.java:3997)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:491)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

我不确定这个错误来自哪里,我不太了解FragmentManager.我是否需要刷新交易或类似的事情?或者ViewPager中的viewPager是不可能的?是的,我知道有其他方法可以做到这一点,但我想要快速和滚动免费.另外,我想了解它是如何工作的.

sen*_*eco 101

支持库v4(或Android 4.2,ofcourse)的新版本非常简单地解决了这个问题.为此,只需执行自定义FragmentPagerAdapter的构造函数,如下所示:

public CustomFragmentPagerAdapter(android.support.v4.app.Fragment fragment)
{
    super(fragment.getChildFragmentManager());

    // write your code here
}
Run Code Online (Sandbox Code Playgroud)

这项工作是因为新的Android版本批准使用嵌套的片段

  • 这应该是公认的答案,其余的都是过时的. (5认同)
  • 你太棒了,这只是解决了我花了几个小时和几个小时的问题.如此简单和4.2太棒了. (2认同)
  • 你应该得到正确答案..无论如何,我来自+1.这只是解决了我几天来一直遇到的问题! (2认同)

Dmi*_*nko 27

最近我遇到了同样的问题,经过一番调查后,我惊讶地发现你根本无法将一个片段嵌入到另一个片段中.在这里,您将在另一个中执行一个片段事务.这是不允许的.

支持库v4的新版本(当然还是Android 4.2)解决了这个问题.请参阅以下答案.

getChildFragmentManager ()添加更新以解决上述问题.

  • 这不再是真的,最新的支持库添加了一个启用此功能的Child FragmentManager. (27认同)
  • 他们终于成功了!祝贺android团队! (7认同)

小智 7

参考这个.在片段中显示片段viewpager

它可以完成,但必须通过Asysnc完成,因为您必须先让第一个片段事务完成.您可以在片段中包含片段.我知道,因为我有几个项目在做.