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() `вызывается, но я его вообще не использую.
Спасибо за каждый совет.
Ответы
Ответ 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, но это не сработало для меня.