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

FragmentManager IllegalStateException: нет хоста

UPDATE: Сбой закончился, когда я положил nullcheks (фрагмент!= Null, getActivity()!= Null), где бы я мог.

Мое приложение использует ViewPager (внеэкранный предел 5) с FragmentStatePagerAdapter, инициализированным getSupportFragmentManager(). На каждой странице есть свои фрагменты и стопы.

При запуске приложения происходит сбой. Проблема возникает только на устройствах preLollipop и эмуляторе. Использование последней поддержки lbrary (попробовал 24.0.0 тоже - тот же результат) StackTrace:

java.lang.IllegalStateException: нет хоста в android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1273)                                                                            в android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1268)                                                                            в android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:2138)                                                                            at android.support.v4.app.Fragment.onCreate(Fragment.java:1254)                                                                            at android.support.v4.app.Fragment.performCreate(Fragment.java:2062)                                                                            в android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1051)                                                                            в android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)                                                                            в android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758)                                                                            в android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1632)                                                                            в android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637)                                                                            в android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:166)                                                                            в android.support.v4.view.ViewPager.populate(ViewPager.java:1237)                                                                            в android.support.v4.view.ViewPager.populate(ViewPager.java:1085)                                                                            в android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1611)                                                                            в android.view.View.measure(View.java:16497)                                                                            в android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)                                                                            в android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)                                                                            на android.widget.LinearLayout.measureVertical(LinearLayout.java:695)                                                                            на android.widget.LinearLayout.onMeasure(LinearLayout.java:588)                                                                            в android.view.View.measure(View.java:16497)                                                                            в android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)                                                                            на android.widget.FrameLayout.onMeasure(FrameLayout.java:310)                                                                            в android.view.View.measure(View.java:16497)                                                                            в android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)                                                                            на android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)                                                                            в android.view.View.measure(View.java:16497)                                                                            в android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)                                                                            на android.widget.FrameLayout.onMeasure(FrameLayout.java:310)                                                                            в android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)                                                                            в android.view.View.measure(View.Java: 16497)                                                                            в android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)                                                                            на android.widget.FrameLayout.onMeasure(FrameLayout.java:310)                                                                            в android.view.View.measure(View.java:16497)                                                                            в android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)                                                                            на android.widget.FrameLayout.onMeasure(FrameLayout.java:310)                                                                            в android.view.View.measure(View.java:16497)                                                                            в android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)                                                                            в android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)                                                                            на android.widget.LinearLayout.measureVertical(LinearLayout.java:695)                                                                            на android.widget.LinearLayout.onMeasure(LinearLayout.java:588)                                                                            в android.view.View.measure(View.java:16497)                                                                            в android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)                                                                            на android.widget.FrameLayout.onMeasure(FrameLayout.java:310)                                                                            в com.android.internal.policy.impl.PhoneWindow $DecorView.onMeasure(PhoneWindow.java:2291)                                                                            в android.view.View.measure(View.java:16497)                                                                            в android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912)                                                                            в android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)                                                                            в android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)                                                                            на android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)                                                                            в android.view.ViewRootImpl $TraversalRunnable.run(ViewRootImpl.java:5600)                                                                            в android.view.Choreographer $CallbackRecord.run(Choreographer.java:761)                                                                            на android.view.Choreographer.doCallbacks(Хореограф .java:574)                                                                            на android.view.Choreographer.doFrame(Хореограф .java:544)                                                                            в android.view.Choreographer $FrameDisplayEventReceiver.run(Choreographer.java:747)                                                                            на android.os.Handler.handleCallback(Handler.java:733)                                                                            на android.os.Handler.dispatchMessage(Handler.java:95)                                                                            на android.os.Looper.loop(Looper.java:136)

4b9b3361

Ответ 1

Если у вас есть вложенный фрагмент (extends FragmentActivity), используйте getChildFragmentManager() вместо getFragmentManager().

Возможно, это поможет вам.

Ответ 2

В моем случае я использую внутренний фрагмент viewpager и использовал getChildFragmentManager() при настройке адаптера viewpager. Также рекомендуется использовать это, я думаю.

Также существует проблема, исключение java.lang.IllegalStateException: No host не показывалось каждый раз, но оно проявлялось слишком часто, когда я вызывал метод viewpager, содержащий Activity или возвращающийся из другого класса Activity, перед установкой viewpager.setCurrentItem(POSITION);

Я пробовал разными способами, и, наконец, я изменил getChildFragmentManager() на getActivity().getSupportFragmentManager();

После изменения этого исключения java.lang.IllegalStateException: No host больше не отображается.

Я думаю, что это связано с проблемой состояния Activity, которая содержит viewpager.

Ответ 3

Когда вы используете viewPager, убедитесь, что вы следуете этим методам.

  • вызов super (fragmentManager) в вашем конструкторе
  • Если вы используете Viewpager внутри фрагмента, передайте getChildFragmentManager в Adapter