'when click back button, the app crashs after a seceond

I have customized back button. when I click on it, the application crashes after a second. here is the code: error log

    private var mBackPressed: Long = 0
    private val timeInterval = 2000



    private fun configBackPress() {
        requireActivity().onBackPressedDispatcher.addCallback(this, true) {
            when {
                mBackPressed + timeInterval > System.currentTimeMillis() -> {
                   
                    requireActivity().onBackPressedDispatcher.onBackPressed()
                }
                else -> {
                    Snackbar.make(
                        requireActivity().findViewById(android.R.id.content),
                        getString(R.string.press_once_again_back_button_to_exit),
                        Snackbar.LENGTH_SHORT
                    )
                        .setAnchorView(viewBinding.vSnackBarHelper)
                        .show()

                    mBackPressed = System.currentTimeMillis()
                }
            }
        }
    }

when the user click two times on back button, the back should work.



Solution 1:[1]

before calling requireActivity().onBackPressedDispatcher.onBackPressed(). you should set isEnabled to false because if we go through the onBackPressed source code we see: enter image description here

it looks for active callbacks and if found any calls them and returns. that's what makes the loop.

your code should be:

isEnabled = false
requireActivity().onBackPressedDispatcher.onBackPressed()

Solution 2:[2]

replace

requireActivity().onBackPressedDispatcher.onBackPressed()

with just

finish()

currently your onBackPressedDispatcher set in Fragment is calling onBackPressed in (required Activity), which will at first try to propagate this event to own childrens - Fragments. so, again, onBackPressedDispatcher will be triggered, again it will call Activitys method and this is loop

edit: isEnabled = false is a better approach, just wanted to leave you some case description

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 mohsen sameti
Solution 2 snachmsm