Obsolete
Status Update
Comments
ma...@gmail.com <ma...@gmail.com> #2
[Comment deleted]
ma...@gmail.com <ma...@gmail.com> #3
Note: According to documentation addToBackStack is optional.
Since the app crashes and the back button does not retrieve the correct fragment, I would reconsider the priority.
LifeCycle of the App
04-07 20:34:46.115: D/Fragment_1(15309): onCreateView Fragment_1
04-07 20:34:46.115: D/Fragment_1(15309): onResume Fragment_1
Click to open 2
04-07 20:34:49.148: D/Fragment_1(15309): onPause Fragment_1
04-07 20:34:49.148: D/Fragment_2(15309): onCreateView Fragment_2
04-07 20:34:49.148: D/Fragment_2(15309): onResume Fragment_2
Click to open 3
04-07 20:34:53.633: D/Fragment_2(15309): onPause Fragment_2
04-07 20:34:53.633: D/Fragment_3(15309): onCreateView Fragment_3
04-07 20:34:53.633: D/Fragment_3(15309): onResume Fragment_3
back Button. Since 3 is not on backstack, app returns to 1 (not pausing 3)
Here Frag 1 and 3 are running and displayed overlaying!
04-07 20:35:03.653: D/Fragment_1(15309): onCreateView Fragment_1
04-07 20:35:03.653: D/Fragment_1(15309): onResume Fragment_1
back Button on 1 - App exit
04-07 20:35:23.474: D/Fragment_1(15309): onPause Fragment_1
04-07 20:35:23.474: D/Fragment_3(15309): onPause Fragment_3
-----
LifeCycle 2 with random navigation and app crash
04-07 20:36:35.311: D/Fragment_1(15504): onCreateView Fragment_1
04-07 20:36:35.311: D/Fragment_1(15504): onResume Fragment_1
open 2
04-07 20:36:37.764: D/Fragment_1(15504): onPause Fragment_1
04-07 20:36:37.774: D/Fragment_2(15504): onCreateView Fragment_2
04-07 20:36:37.774: D/Fragment_2(15504): onResume Fragment_2
open 3
04-07 20:36:40.527: D/Fragment_2(15504): onPause Fragment_2
04-07 20:36:40.527: D/Fragment_3(15504): onCreateView Fragment_3
04-07 20:36:40.527: D/Fragment_3(15504): onResume Fragment_3
back button -> returns to 1
04-07 20:36:41.478: D/Fragment_1(15504): onCreateView Fragment_1
04-07 20:36:41.478: D/Fragment_1(15504): onResume Fragment_1
open 2 (Note: Here 1 should be paused. Instead 3 is paused)
04-07 20:36:45.462: D/Fragment_3(15504): onPause Fragment_3
04-07 20:36:45.462: D/Fragment_2(15504): onCreateView Fragment_2
04-07 20:36:45.462: D/Fragment_2(15504): onResume Fragment_2
open 3 (now 1 is paused instead of 2)
04-07 20:37:03.341: D/Fragment_1(15504): onPause Fragment_1
04-07 20:37:03.351: D/Fragment_3(15504): onCreateView Fragment_3
04-07 20:37:03.351: D/Fragment_3(15504): onResume Fragment_3
back button (now 2 is paused and system crashes)
04-07 20:37:09.908: D/Fragment_2(15504): onPause Fragment_2
04-07 20:37:09.908: D/AndroidRuntime(15504): Shutting down VM
04-07 20:37:09.908: W/dalvikvm(15504): threadid=1: thread exiting with uncaught exception (group=0x41444930)
04-07 20:37:09.908: E/AndroidRuntime(15504): FATAL EXCEPTION: main
04-07 20:37:09.908: E/AndroidRuntime(15504): java.lang.IllegalStateException: Fragment already added: Fragment3{4171b0e0 #2 id=0x7f070000 Fragment_3}
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1128)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:722)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1484)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:490)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.Activity.onBackPressed(Activity.java:2167)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.Activity.onKeyUp(Activity.java:2145)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.view.KeyEvent.dispatch(KeyEvent.java:2633)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.Activity.dispatchKeyEvent(Activity.java:2375)
04-07 20:37:09.908: E/AndroidRuntime(15504): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1903)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3701)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3651)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2818)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.os.Handler.dispatchMessage(Handler.java:99)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.os.Looper.loop(Looper.java:137)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.ActivityThread.main(ActivityThread.java:5227)
04-07 20:37:09.908: E/AndroidRuntime(15504): at java.lang.reflect.Method.invokeNative(Native Method)
04-07 20:37:09.908: E/AndroidRuntime(15504): at java.lang.reflect.Method.invoke(Method.java:511)
04-07 20:37:09.908: E/AndroidRuntime(15504): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
04-07 20:37:09.908: E/AndroidRuntime(15504): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
04-07 20:37:09.908: E/AndroidRuntime(15504): at dalvik.system.NativeStart.main(Native Method)
Since the app crashes and the back button does not retrieve the correct fragment, I would reconsider the priority.
LifeCycle of the App
04-07 20:34:46.115: D/Fragment_1(15309): onCreateView Fragment_1
04-07 20:34:46.115: D/Fragment_1(15309): onResume Fragment_1
Click to open 2
04-07 20:34:49.148: D/Fragment_1(15309): onPause Fragment_1
04-07 20:34:49.148: D/Fragment_2(15309): onCreateView Fragment_2
04-07 20:34:49.148: D/Fragment_2(15309): onResume Fragment_2
Click to open 3
04-07 20:34:53.633: D/Fragment_2(15309): onPause Fragment_2
04-07 20:34:53.633: D/Fragment_3(15309): onCreateView Fragment_3
04-07 20:34:53.633: D/Fragment_3(15309): onResume Fragment_3
back Button. Since 3 is not on backstack, app returns to 1 (not pausing 3)
Here Frag 1 and 3 are running and displayed overlaying!
04-07 20:35:03.653: D/Fragment_1(15309): onCreateView Fragment_1
04-07 20:35:03.653: D/Fragment_1(15309): onResume Fragment_1
back Button on 1 - App exit
04-07 20:35:23.474: D/Fragment_1(15309): onPause Fragment_1
04-07 20:35:23.474: D/Fragment_3(15309): onPause Fragment_3
-----
LifeCycle 2 with random navigation and app crash
04-07 20:36:35.311: D/Fragment_1(15504): onCreateView Fragment_1
04-07 20:36:35.311: D/Fragment_1(15504): onResume Fragment_1
open 2
04-07 20:36:37.764: D/Fragment_1(15504): onPause Fragment_1
04-07 20:36:37.774: D/Fragment_2(15504): onCreateView Fragment_2
04-07 20:36:37.774: D/Fragment_2(15504): onResume Fragment_2
open 3
04-07 20:36:40.527: D/Fragment_2(15504): onPause Fragment_2
04-07 20:36:40.527: D/Fragment_3(15504): onCreateView Fragment_3
04-07 20:36:40.527: D/Fragment_3(15504): onResume Fragment_3
back button -> returns to 1
04-07 20:36:41.478: D/Fragment_1(15504): onCreateView Fragment_1
04-07 20:36:41.478: D/Fragment_1(15504): onResume Fragment_1
open 2 (Note: Here 1 should be paused. Instead 3 is paused)
04-07 20:36:45.462: D/Fragment_3(15504): onPause Fragment_3
04-07 20:36:45.462: D/Fragment_2(15504): onCreateView Fragment_2
04-07 20:36:45.462: D/Fragment_2(15504): onResume Fragment_2
open 3 (now 1 is paused instead of 2)
04-07 20:37:03.341: D/Fragment_1(15504): onPause Fragment_1
04-07 20:37:03.351: D/Fragment_3(15504): onCreateView Fragment_3
04-07 20:37:03.351: D/Fragment_3(15504): onResume Fragment_3
back button (now 2 is paused and system crashes)
04-07 20:37:09.908: D/Fragment_2(15504): onPause Fragment_2
04-07 20:37:09.908: D/AndroidRuntime(15504): Shutting down VM
04-07 20:37:09.908: W/dalvikvm(15504): threadid=1: thread exiting with uncaught exception (group=0x41444930)
04-07 20:37:09.908: E/AndroidRuntime(15504): FATAL EXCEPTION: main
04-07 20:37:09.908: E/AndroidRuntime(15504): java.lang.IllegalStateException: Fragment already added: Fragment3{4171b0e0 #2 id=0x7f070000 Fragment_3}
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1128)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:722)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1484)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:490)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.Activity.onBackPressed(Activity.java:2167)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.Activity.onKeyUp(Activity.java:2145)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.view.KeyEvent.dispatch(KeyEvent.java:2633)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.Activity.dispatchKeyEvent(Activity.java:2375)
04-07 20:37:09.908: E/AndroidRuntime(15504): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1903)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3701)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3651)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2818)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.os.Handler.dispatchMessage(Handler.java:99)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.os.Looper.loop(Looper.java:137)
04-07 20:37:09.908: E/AndroidRuntime(15504): at android.app.ActivityThread.main(ActivityThread.java:5227)
04-07 20:37:09.908: E/AndroidRuntime(15504): at java.lang.reflect.Method.invokeNative(Native Method)
04-07 20:37:09.908: E/AndroidRuntime(15504): at java.lang.reflect.Method.invoke(Method.java:511)
04-07 20:37:09.908: E/AndroidRuntime(15504): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
04-07 20:37:09.908: E/AndroidRuntime(15504): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
04-07 20:37:09.908: E/AndroidRuntime(15504): at dalvik.system.NativeStart.main(Native Method)
ma...@gmail.com <ma...@gmail.com> #4
This happens also if not ActionBarCompat/getSupportFragmentManager but only default Fragment/getFragmentManager (v14+) is used.
Description
App Starts with [1], User can only navigate to [2] and then optionally to [3]. Since [3] is deep down, I want [3] to go back to [1] directly.
Currently I call [2] using addToBackStack(null). Since I do NOT call addToBackStack on [3] I assumed it will go back to [1].
What happens is, that [3] returns to [1], but now both fragments are displayed overlapping(!). Fragment [3] does not call onPause(). Calling fragment [2] again will display [2] on top of the others, not clearing the screen.
Navigating back and forth will crash the app. Sometimes on opening a new fragment, sometimes when hitting the back button. Always with "Fragment already added" error (which is extremely odd for the back button, but I check that also before switching fragments).
Sample App attached. Appcompat v7 used.