Fixed
Status Update
Comments
da...@gmail.com <da...@gmail.com> #2
I attach a project to reproduce the issue.
There are 2 buttons: one add a named fragment transaction (which you can remove with back) and the other navigate to another fragment using nav graph.
There are 2 buttons: one add a named fragment transaction (which you can remove with back) and the other navigate to another fragment using nav graph.
il...@google.com <il...@google.com> #3
You should be using childFragmentManager, not requireFragmentManager(). As of Alpha 04 and https://issuetracker.google.com/issues/111345778 , back button presses are automatically passed to the child FragmentManager of the active Fragment, allowing you to do whatever FragmentTransactions you want in that child FragmentManager (using Navigation or not).
We can improve the error message though.
We can improve the error message though.
da...@gmail.com <da...@gmail.com> #4
Ah, of course I should....
shame on me.
Improving the error message will surely help fools like me :) thanks
shame on me.
Improving the error message will surely help fools like me :) thanks
il...@google.com <il...@google.com>
il...@google.com <il...@google.com> #5
We've added a better error message in https://android-review.googlesource.com/861401 and this will be available in 1.0.0-alpha10.
Description
Version used: 1.0.0-alpha05
Devices/Android versions reproduced on: Pixel 2 (Pie) / Emulator Nougat / Pie
I Stumbled on this stacktrace in a project that use the new navigation component:
java.lang.NumberFormatException: For input string: "TRANSACTION_NAME"
at java.lang.Integer.parseInt(Integer.java:615)
at java.lang.Integer.valueOf(Integer.java:801)
at androidx.navigation.fragment.FragmentNavigator.isBackStackEqual(FragmentNavigator.java:252)
at androidx.navigation.fragment.FragmentNavigator$1.onBackStackChanged(FragmentNavigator.java:83)
at androidx.fragment.app.FragmentManagerImpl.reportBackStackChanged(FragmentManager.java:2733)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2439)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2372)
at androidx.fragment.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:884)
at androidx.fragment.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:827)
at androidx.fragment.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:874)
at androidx.fragment.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:827)
at androidx.fragment.app.FragmentActivity.onBackPressed(FragmentActivity.java:190)
at android.app.Activity.onKeyUp(Activity.java:3082)
In one of my fragment I manage an internal fragment transaction
requireFragmentManager().beginTransaction()
.addToBackStack("TRANSACTION_NAME")
.commit()
from the fragment doing this I navigate to another using the nav graph and when i press back that stack trace pop up and the app crashes.
If i use navController.navigateUp() nothing happens.
Looking in the code of FragmentNavigator I see
Integer.valueOf(mFragmentManager
.getBackStackEntryAt(fragmentBackStackIndex--)
.getName())
apparently you assume any back stack entry name is an integer.
Is this a design decision? Does that means I can't use fragment transactions on my own if I use the navigation component?
I honestly only use this to detect the user pressing back in my fragment without having to rely on the activity forwarding the information cause I have an overlay view on top of my fragment that is supposed to go away when the user press back and I don't have an `onBackPressed()` on the fragment.