Fixed
Status Update
Comments
il...@google.com <il...@google.com>
ap...@google.com <ap...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
commit 9d2bbe0b2f760c139e68f89183f751d2e25ca5d3
Author: Jeremy Woods <jbwoods@google.com>
Date: Wed Feb 15 19:29:50 2023
Fix dynamicNavHost with new FragmentNavigator
When using Dynamic Navigation, if you navigate after inflating with a
FragmentContainerView, the DynamicNavigator crashes because it attempts
to register an onBackChangedListener before the navigator is attached.
Instead of attaching an onBackChangedListener to the FragmentManager in
the init block, do it in onAttach().
RelNote: "Fixed a crash when attempting to navigate while using Dynamic
Navigation."
Test: tested in sample App
Bug: 268360479
Change-Id: I3ee29ea33f2cc7f7221b79d4d17399c725a6a4df
M navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.kt
https://android-review.googlesource.com/2438793
Branch: androidx-main
commit 9d2bbe0b2f760c139e68f89183f751d2e25ca5d3
Author: Jeremy Woods <jbwoods@google.com>
Date: Wed Feb 15 19:29:50 2023
Fix dynamicNavHost with new FragmentNavigator
When using Dynamic Navigation, if you navigate after inflating with a
FragmentContainerView, the DynamicNavigator crashes because it attempts
to register an onBackChangedListener before the navigator is attached.
Instead of attaching an onBackChangedListener to the FragmentManager in
the init block, do it in onAttach().
RelNote: "Fixed a crash when attempting to navigate while using Dynamic
Navigation."
Test: tested in sample App
Bug: 268360479
Change-Id: I3ee29ea33f2cc7f7221b79d4d17399c725a6a4df
M navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/FragmentNavigator.kt
jb...@google.com <jb...@google.com> #3
This has been fixed internally and will be available in the Navigation 2.6.0-alpha06
release.
na...@google.com <na...@google.com> #4
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.navigation:navigation-fragment:2.6.0-alpha06
Description
Using
DynamicNavHostFragment
inandroidx.navigation:*:2.6.0-alpha05
cause an IllegalStateException when navigating.Stacktrace:
FATAL EXCEPTION: main Process: com.geekorum.rdv.bwemanje.debug, PID: 10981 java.lang.IllegalStateException: You cannot access the Navigator's state until the Navigator is attached at androidx.navigation.Navigator.getState(Navigator.kt:68) at androidx.navigation.fragment.FragmentNavigator.access$getState(FragmentNavigator.kt:53) at androidx.navigation.fragment.FragmentNavigator$1.onBackStackChangeCommitted(FragmentNavigator.kt:81) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1954) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1841) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1778) at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:565) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7872) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
This is caused by registering an OnBackStackChangeListener when constructing FragmentNavigator .
DynamicNavHostFragment first create a regular
FragmentNavigator
that registers his OnBackStackChangeListener. This navigator is then replaced by aDynamicFragmentNavigator
. When the graph is created the navigators are all attached except the replaced FragmentNavigator which cause the crash as its OnBackStackChangeListener is still called.To reproduce use the following layout in an activity and cause a navigation