【问题标题】:ViewPager: Recursive entry to executePendingTransactionsViewPager:执行PendingTransactions的递归入口
【发布时间】:2011-09-07 18:36:34
【问题描述】:

我在 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)

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

【问题讨论】:

    标签: android android-3.0-honeycomb


    【解决方案1】:

    Support Library v4 的新版本(或 Android 4.2,当然)解决了这个问题很简单。为此,只需像这样执行自定义 FragmentPagerAdapter 的构造函数:

    public CustomFragmentPagerAdapter(android.support.v4.app.Fragment fragment)
    {
        super(fragment.getChildFragmentManager());
    
        // write your code here
    }
    

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

    【讨论】:

    • 这应该是公认的答案,其余的都过时了。
    • 你太棒了,这只是解决了一个我花了好几个小时解决的问题。如此简单和 4.2-fantastic。
    • 你应该得到正确的答案。无论如何,我要 +1。这只是解决了我几天来一直遇到的问题!
    • 以及如何从 Activity 类创建它的实例
    • 为什么我们不能多次投票 :) (Y) 解决方案
    【解决方案2】:

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

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

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

    【讨论】:

    • 这不再是真的,最新的支持库添加了一个 Child FragmentManager 来启用它。
    • 你应该更新你的答案,因为它仍然是被接受的。
    【解决方案3】:

    参考这个。 Display fragment viewpager within a fragment

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

    【讨论】:

    • 这似乎工作正常使用处理程序或 AsyncTask 来执行 PendingTransactions() 这将在父片段完成后执行它是 executePendingTransactions()
    猜你喜欢
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2023-01-20
    相关资源
    最近更新 更多