2015-10-19 13 views
12

Ich bin vor sehr seltsames Problem mit dieser Stacktrace:FragmentManager - Illegal - No-Host

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) 

I verfolgen 4 Vorkommen dieses Absturzes auf mehreren Android-Versionen (4.1.2, 4.2.2, 6.0). Ich verwende Fragments, was bedeutet, ich kann nicht herausfinden, wo genau die Ausnahme ausgelöst wird.

Code of FragmentManager:

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

Meiner Meinung nach, so geschieht dies, wenn kein Host ist Activity-Fragment gehören. I ve read this exception is sometimes thrown when setRetainInstance() `wird aufgerufen, aber ich benutze es überhaupt nicht.

Danke für jeden Rat.

+2

Hallo Leute, hast du irgendeine Lösung für dieses Problem noch? –

Antwort

3

Wenn Sie verschachtelt haben Fragment (die Elternpartition erweitert FragmentFactory), dann verwenden Sie getChildFragmentManager() anstelle von getFragmentManager().

Sie können auch getSupportFragmentManager() verwenden.

EDIT: Wenn dieses Fragment ein Kind von einem anderen Fragment ist, das FragmentManager hier zurückgegeben wird getChildFragmentManager() die Eltern sein.

HINWEIS: Geben Sie das Hostobjekt dieses Fragments zurück. Gibt möglicherweise null zurück, wenn das Fragment derzeit nicht gehostet wird. Siehe http://developer.android.com/reference/android/app/Fragment.html#getHost()

+0

Bitte klären Sie Ihre Antwort. Es ist verwirrend. Sollten wir den Supportmanager nutzen oder nicht? – Siddharth

+0

Danke für die Wiederholung. Bitte überprüfen Sie meine bearbeitete Antwort. Willst du mehr Hilfe? – pRaNaY

+0

Lassen Sie mich versuchen, es zu korrigieren. Sie überprüfen es. – Siddharth

0

Ich habe das gleiche Problem und dies scheint das relevante Problem zu sein: https://code.google.com/p/android/issues/detail?id=42601. In den vorherigen Versionen der Support-Bibliothek von v4 war die Ausnahme java.lang.IllegalStateException: No activity.

Ich habe die Workaround # 10 versucht, aber es hat nicht für mich funktioniert.

1

Ich bin nicht sicher, warum Sie diesen Fehler erhalten. Ich habe diesen Fehler, wenn ich Fragmente wiederverwendet und nicht

fragmentManager.executePendingTransactions()