Fixed
Status Update
Comments
jb...@google.com <jb...@google.com>
jb...@google.com <jb...@google.com>
me...@gmail.com <me...@gmail.com> #2
Same for me. Got this crash on 2.7.* and 2.6.*
Still using 2.5.3 version - works perfectly fine
Still using 2.5.3 version - works perfectly fine
ap...@google.com <ap...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-main
commit 1afb45875cd3393c8c7dad97168a447d593ae7ac
Author: Clara Fok <clarafok@google.com>
Date: Tue Sep 26 16:49:09 2023
Fix pop signal in FragmentNavigator
We used to rely on pop signal from FragmentManager to determine whether an entry should have been popped or not. However this pop signal only represents the last operation within a transaciton where multiple operations (pop and navigate alike) are batched together. This leads us to misidentify an entry
that should be popped as one that should not be, and throw when this entry was correctly popped.
Now we track entry states based on the signal from FragmentManager as well as tracking pop operations that were initiated through NavController.
Test: ./gradlew navigation:navigation-fragment:cC
Bug: 301887045
Relnote: "Fix issue where interrupting a Fragment navigation with another navigate with popUpTo will cause FragmentNavigaor to crash."
Change-Id: I3c8483110b22e6e7d4b31cde88f2391784d9007d
M navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorTest.kt
M navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavControllerWithFragmentTest.kt
M navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.kt
https://android-review.googlesource.com/2762737
Branch: androidx-main
commit 1afb45875cd3393c8c7dad97168a447d593ae7ac
Author: Clara Fok <clarafok@google.com>
Date: Tue Sep 26 16:49:09 2023
Fix pop signal in FragmentNavigator
We used to rely on pop signal from FragmentManager to determine whether an entry should have been popped or not. However this pop signal only represents the last operation within a transaciton where multiple operations (pop and navigate alike) are batched together. This leads us to misidentify an entry
that should be popped as one that should not be, and throw when this entry was correctly popped.
Now we track entry states based on the signal from FragmentManager as well as tracking pop operations that were initiated through NavController.
Test: ./gradlew navigation:navigation-fragment:cC
Bug: 301887045
Relnote: "Fix issue where interrupting a Fragment navigation with another navigate with popUpTo will cause FragmentNavigaor to crash."
Change-Id: I3c8483110b22e6e7d4b31cde88f2391784d9007d
M navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/FragmentNavigatorTest.kt
M navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavControllerWithFragmentTest.kt
M navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.kt
cl...@google.com <cl...@google.com> #4
Fixed internally and will be available in navigation 2.7.4
.
pa...@gmail.com <pa...@gmail.com> #5
Thanks, looks good now!
da...@gmail.com <da...@gmail.com> #6
thank
na...@google.com <na...@google.com> #7
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-fragment:2.8.0-alpha01
Description
1) navigate from MainFragment to FirstFragment
2) navigate to SecondFragment
The SecondFragment pops back to the FirstFragment in its onViewCreated method. Then back in the FirstFragment, we pop off the FirstFragment and navigate to the ThirdFragment, this is where app crashes.
This worked perfectly fine with 2.5.3.
Can you pls have a look since this prevents updating to a version newer than 2.5.3?
Stack trace:
java.lang.IllegalArgumentException: The fragment FirstFragment{2c65689} (e99e2eaa-406a-4082-ae76-ad82c6fb308e id=0x7f080138 tag=4a0f0ba7-9c35-4ffb-8791-20508f1c4bd1) is unknown to the FragmentNavigator. Please use the navigate() function to add fragments to the FragmentNavigator managed FragmentManager.
at androidx.navigation.fragment.FragmentNavigator$onAttach$2.onBackStackChangeCommitted(FragmentNavigator.kt:184)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1918)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1845)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:565)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Component used: Navigation
Version used: 2.7.3
Devices/Android versions reproduced on:
any