Search code examples
androidandroidxandroid-jetpackandroid-architecture-navigation

OnBackPressedCallback is being called, but app is not going back


I recently updated my dependencies to include the OnBackPressedCallback change from an interface into an abstract class.

I have set things up according to the new documentation here but I feel like things are not working as they should.

My fragment's OnCreate looks a lot like the documentation:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        requireActivity().onBackPressedDispatcher.addCallback(this) {
            backPressed()
    }
}

When I press the back button, the code in backPressed() is run, but nothing more happens.

I have tried calling handleBackPressed() and requireActivity().onBackPressedDispatcher.onBackPressed() and requireActivity().onBackPressed() from inside the callback, but those all cause a StackOverflowError because it seems to run that callback recursively.

There has got to be something really obvious I am missing...


Solution

  • When you register an OnBackPressedCallback, you are taking on the responsibility for handling the back button. That means that no other on back pressed behavior is going to occur when you get a callback.

    If you're using Navigation, you can use your NavController to pop the back stack:

    requireActivity().onBackPressedDispatcher.addCallback(this) {
        backPressed()
        // Now actually go back
        findNavController().popBackStack()
    }