Подтвердить что ты не робот

FragmentManager - IllegalStateException - нет хоста

Я столкнулся с очень странной проблемой с этой stacktrace:

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)

Я отслеживал 4 появления этого сбоя на нескольких версиях Android (4.1.2, 4.2.2, 6.0). Я использую o lot Fragments, что означает, что я не могу понять, где именно генерируется исключение.

Код FragmentManager:

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

По-моему, это происходит, когда нет хоста Activity, принадлежащего Fragment. я ve read this exception is sometimes thrown when setRetainInstance() `вызывается, но я его вообще не использую.

Спасибо за каждый совет.

4b9b3361

Ответ 1

Если у вас есть вложенный Fragment (который имеет родительскую активность, расширяет FragmentActivity), используйте getChildFragmentManager() вместо getFragmentManager().

Вы также можете использовать getSupportFragmentManager().

EDIT: Если этот фрагмент является дочерним элементом другого фрагмента, возвращаемый здесь FragmentManager будет родительским getChildFragmentManager().

Примечание: Верните объект-хост этого фрагмента. Может возвращать значение null, если фрагмент в настоящее время не размещен. Видеть http://developer.android.com/reference/android/app/Fragment.html#getHost()

Ответ 2

Я не уверен, почему вы получаете эту ошибку. Я получил эту ошибку, когда я повторно использовал фрагменты и не вызывал

    fragmentManager.executePendingTransactions()

Ответ 3

У меня такая же проблема, и это, по-видимому, актуальная проблема: https://code.google.com/p/android/issues/detail?id=42601. В предыдущих версиях библиотеки поддержки v4 исключение составляло java.lang.IllegalStateException: No activity.

Я пробовал обходное решение № 10, но это не сработало для меня.