2015-10-19 7 views
12

私はこのスタックトレースで非常に奇妙な問題に直面している:FragmentManager - IllegalStateExceptionが - いいえ、ホスト

Fatal Exception: java.lang.IllegalStateException No host 
    android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1194) 
    android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1189) 
    android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated (FragmentManager.java:2001) 
    android.support.v4.app.Fragment.performActivityCreated (Fragment.java:1976) 
    android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1051) 
    android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1207) 
    android.support.v4.app.BackStackRecord.run (BackStackRecord.java:738) 
    android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:1572) 
    android.support.v4.app.FragmentManagerImpl$1.run (FragmentManager.java:493) 
    android.os.Handler.handleCallback (Handler.java:733) 
    android.os.Handler.dispatchMessage (Handler.java:95) 
    android.os.Looper.loop (Looper.java:146) 
    android.app.ActivityThread.main (ActivityThread.java:5593) 
    java.lang.reflect.Method.invokeNative (Method.java) 
    java.lang.reflect.Method.invoke (Method.java:515) 
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1283) 
    com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1099) 
    dalvik.system.NativeStart.main (NativeStart.java) 

私は複数のAndroidのバージョン(4.1.2、4.2.2、6.0)にこのクラッシュの4出現箇所を追跡しました。私は多くのFragmentsを使用しています。つまり、どこに例外がスローされたのかわかりません。 FragmentManager

コード:Fragmentに属すホストActivityがない場合、私の意見では

void moveToState(int newState, int transit, int transitStyle, boolean always) { 
    if (mHost == null && newState != Fragment.INITIALIZING) { 
     throw new IllegalStateException("No host"); 
    } 
    ... 
} 

、これは起こります。私はve read this exception is sometimes thrown when setRetainInstance() `が呼び出されましたが、私は全く使用しません。

アドバイスありがとうございます。

+2

こんにちは、この問題はまだ解決していますか? –

答えて

3

Fragment(親アクティビティがFragmentActivityを継承している)をネストした場合は、getFragmentManager()ではなくgetChildFragmentManager()を使用してください。

getSupportFragmentManager()も使用できます。

EDIT: この断片は他の断片の子である場合は、FragmentManagerがここで返さは、親のgetChildFragmentManager()になります。

注: このフラグメントのホストオブジェクトを返します。フラグメントが現在ホストされていない場合はnullを返すことがあります。 http://developer.android.com/reference/android/app/Fragment.html#getHost()

+0

答えを明確にしてください。ややこしい。 getsupportfragementmanagerを使うべきかどうか? – Siddharth

+0

リプレイをありがとう。 私の編集した答えを確認してください。より多くのヘルプを自由に聞いてみたいです。 – pRaNaY

+0

私はそれを修正しようとしましょう。あなたはそれを見直す。 – Siddharth

0

私は同じ問題を抱えています。これは関連する問題のようです:https://code.google.com/p/android/issues/detail?id=42601。サポートv4ライブラリの以前のバージョンでは例外はjava.lang.IllegalStateException: No activityでした。

私は回避策#10を試しましたが、それは私のためには機能しませんでした。

1

なぜこのエラーが発生するのかわかりません。フラグメントを再利用しているときにこのエラーが発生する

fragmentManager.executePendingTransactions() 
関連する問題