web-dev-qa-db-ja.com

ViewPager:executePendingTransactionsへの再帰的なエントリ

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は不可能ですか?そして、はい、私はこれを行う他の方法があることを知っていますが、私はスナップとスクロールを無料で欲しいです。また、実際にどのように機能するかを理解したいと思います。

47
browep

最近、私は同じ問題に遭遇しました。少し調べてみると、あるフラグメントを別のフラグメントに埋め込むことができないことに驚いていました。ここでは、1つのフラグメントトランザクションを別のフラグメントトランザクションで実行しています。許可されていません。

サポートライブラリv4の新しいバージョン(またはAndroid 4.2、もちろん)は、この問題を解決します。以下の回答を参照してください。

更新getChildFragmentManager ()が上記の問題に取り組むために追加されました。

27

Support Library v4 (またはAndroid 4.2、もちろん)の新しいバージョンは、この問題を非常に簡単に解決します。

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

    // write your code here
}

これは、新しいAndroidバージョンがネストされたフラグメントを使用して承認するためです。

101
senneco

これを参照してください。 フラグメント内のフラグメントビューページャーを表示

それはできますが、最初のフラグメントトランザクションを最初に完了させる必要があるため、Asysncを介して行われました。フラグメント内にフラグメントを持つことができます。いくつかのプロジェクトでそれをやっているからです。

7
Jack