23

UPDATE: Crashes gone when i put nullcheks (fragment != null, getActivity() != null) whereever i could.

My app is using ViewPager (offscreen limit 5) with FragmentStatePagerAdapter initialized with getSupportFragmentManager(). Each page has it's own fragments and backstack.

App crashes on startup. Problem occurs only on preLollipop devices and emulator. Using latest support lbrary (tried 24.0.0 also - same result) Stacktrace:

java.lang.IllegalStateException: No host at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1273) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1268) at 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) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1051) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758) at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1632) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637) at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:166) at android.support.v4.view.ViewPager.populate(ViewPager.java:1237) at android.support.v4.view.ViewPager.populate(ViewPager.java:1085) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1611) at android.view.View.measure(View.java:16497) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:16497) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:16497) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) at android.view.View.measure(View.java:16497) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) at android.view.View.measure(View.java:16497) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:16497) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:16497) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:16497) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) at android.view.View.measure(View.java:16497) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:544) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136)

localhost
  • 5,568
  • 1
  • 33
  • 53
  • can you show us some codes? – Ahad Oct 02 '16 at 07:33
  • 1
    @AbdulAhad there's so much code regarding transactions and Fragments in total - so i have no idea what code to post (and it's not clear from the stacktrace from where problem is). – localhost Oct 02 '16 at 07:50
  • you can take a look at this http://stackoverflow.com/questions/33210617/fragmentmanager-illegalstateexception-no-host – Ahad Oct 02 '16 at 07:55
  • before calling `setCurrentItem(()` check if `getActivity()` is null – Elltz Oct 03 '16 at 03:16
  • Where do you call `setCurrentItem`? Can u add this code block? – Tin Tran Oct 05 '16 at 13:41
  • I have the similar problem. But, I'm using ViewAnimator. The crash happens during rotation. It doesn't happen when I use SDK 24 + support library 24.2.1. The crash happens after I use SDK 25 + support library 25.0.0 – Cheok Yan Cheng Nov 05 '16 at 13:23

3 Answers3

1

If you have nested Fragment (extends FragmentActivity), then use getChildFragmentManager() instead of getFragmentManager().

may be it will help you ..

Jamil Hasnine Tamim
  • 4,389
  • 27
  • 43
1

In my case, I am using viewpager inside fragment and was using getChildFragmentManager() while setting viewpager adapter. It is also recommended to use this I guess.

There is also an issue, java.lang.IllegalStateException: No host exception was not showing everytime but it was showing too often when I called a method of viewpager containing Activity or coming back from another Activity class before setting viewpager.setCurrentItem(POSITION);

I tried in many ways and finally I changed getChildFragmentManager() to getActivity().getSupportFragmentManager();

After changing this java.lang.IllegalStateException: No host exception is not showing any more.

I think its related to Activity state issue which contains viewpager.

Exigente05
  • 2,161
  • 3
  • 22
  • 42
0

When you are using viewPager , make sure you are following these practices

  1. call super(fragmentManager) in your constructor
  2. if you are using Viewpager inside a Fragment, pass getChildFragmentManager in to Adapter
Nandhu
  • 158
  • 9