Why Android Navigation Component screen not go back to previous Fragment,but a method in onViewCreated of previos Fragment being called?
Android maintains a back stack that contains the destinations you've visited. The first destination of your app is placed on the stack when the user opens the app. Each call to the navigate()
method puts another destination on top of the stack. Tapping Up or Back calls the NavController.navigateUp()
and NavController.popBackStack()
methods, respectively, to remove (or pop) the top destination off of the stack.
NavController.popBackStack()
returns a boolean indicating whether it successfully popped back to another destination. The most common case when this returns false is when you manually pop the start destination of your graph.
When the method returns false, NavController.getCurrentDestination()
returns null. You are responsible for either navigating to a new destination or handling the pop by calling finish()
on your Activity.
When navigating using an action, you can optionally pop additional destinations off of the back stack by using popUpTo
and popUpToInclusive
parameter of the action.
class MyFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (true == conditionForCustomAction) {
CustomActionHere()
} else NavHostFragment.findNavController(this@MyFragment).navigateUp();
}
}
requireActivity().onBackPressedDispatcher.addCallback(
this, onBackPressedCallback
)
...
}
I had the same problem. For me the issue was that I was using a LiveData boolean to decide when to go to the next fragment. When I then navigated back/up the boolean was still true so it would automatically navigate forward again.