3

I have an application with three tabs (TabWidget using fragments). Each tab opens a fragment that contains a a view pager that is based on FragmentStatePagerAdapter. The view pager is populated with items fetched from an online server using Async task.

My problem:

  • I click on tab 1, then it begins loading the items(using asyncTask)
  • Then I click tab 2, which agains starts loading.
  • When I click again on tab 1, the application force closes withe the stack trace shown below:
E/AndroidRuntime(29658): FATAL EXCEPTION: main
E/AndroidRuntime(29658): java.lang.IllegalStateException: Fragement no longer exists for key f1: index 1
E/AndroidRuntime(29658):        at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:564)
E/AndroidRuntime(29658):        at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211)
E/AndroidRuntime(29658):        at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1220)
E/AndroidRuntime(29658):        at android.view.View.dispatchRestoreInstanceState(View.java:11910)
E/AndroidRuntime(29658):        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2584)
E/AndroidRuntime(29658):        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2590)
E/AndroidRuntime(29658):        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2590)
E/AndroidRuntime(29658):        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2590)
E/AndroidRuntime(29658):        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2590)
E/AndroidRuntime(29658):        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2590)
E/AndroidRuntime(29658):        at android.view.View.restoreHierarchyState(View.java:11888)
E/AndroidRuntime(29658):        at android.support.v4.app.Fragment.restoreViewState(Fragment.java:417)
E/AndroidRuntime(29658):        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:933)
E/AndroidRuntime(29658):        at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1264)
E/AndroidRuntime(29658):        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:672)
E/AndroidRuntime(29658):        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
E/AndroidRuntime(29658):        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
E/AndroidRuntime(29658):        at android.os.Handler.handleCallback(Handler.java:615)
E/AndroidRuntime(29658):        at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(29658):        at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(29658):        at android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime(29658):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(29658):        at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(29658):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime(29658):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime(29658):        at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager(17922):   Force finishing activity com.abello.news/.MainActivity
Michaël
  • 3,679
  • 7
  • 39
  • 64
user1599914
  • 53
  • 2
  • 5
  • We need code - otherwise we cannot know what you are doing and what causes the problem! – Wolfram Rittmeyer Feb 01 '13 at 13:30
  • Category category1Adapter = new Category1Adapter(getChildFragmentManager(),category1Events.size()); ViewPager category1Pager = (ViewPager) fragmentView.findViewById(R.id.image_slider_category1); category1Pager.setAdapter(category1Adapter); where Category1Adapter is a class that extends FragmentStatePagerAdapter and category1Events is an arraylist. The line that is causing the error is this one:category1Pager.setAdapter(category1Adapter);@WolframRittmeyer hope this helps. Thanks – user1599914 Feb 02 '13 at 13:55
  • I'm sorry, but no, that's not enough. Please edit your question and add as much code as possible. Of your activity, your fragments, your adapters, of the tab handling code and maybe even parts of your XML layout definitions if they help to understand your construct. – Wolfram Rittmeyer Feb 02 '13 at 21:42
  • 1
    @WolframRittmeyer seems like the OP has signed a very strict NDA with his project manager :D – Sufian Jan 22 '15 at 12:45

2 Answers2

3

I know it's been taken much time, but there's no right answer.

Try to use FragmentPagerAdapter instead of FragmentStatePagerAdapter. Because the latter uses to save the state and doesn't update some data.

Lennon Spirlandelli
  • 3,131
  • 5
  • 26
  • 51
-1

Your problem is this line:

Category category1Adapter = new Category1Adapter(getChildFragmentManager(),category1Events.size()); 

Instead of using getChildFragmentManager() you have to use getFragmentManager() in order to ensure that the Fragment is still around when the screen is recreated.

Basic Coder
  • 10,882
  • 6
  • 42
  • 75