Fixed
Status Update
Comments
il...@google.com <il...@google.com>
ap...@google.com <ap...@google.com> #2
since these are in public API (:/) we need to do this in 1.2
jb...@google.com <jb...@google.com> #3
since it is already marked as deprecated, we can probably do it by now.
na...@google.com <na...@google.com> #4
Opening diff shortly
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