使用 android 后退按钮按下回调

Using androix backButtonPressedCallback

我需要为片段实现自定义 onBackButtonPress 方法。处理注销后,LogoutFragment 中的示例。用户无法返回 backStack,但会显示 press again to exist 之类的消息并退出。我使用 this solution. But is not working. Then I saw this Android DoconBackPressedDispatcher 回调方法 CODE BELOW。我想这会奏效。我添加了依赖项,但如何在不同的片段中实现它,只有 1 activity 和片段容器。 Kotlin 版本。

    class LogoutFragment : DaggerFragment() {

       override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)           

                val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {

                    ...
                }

               ...
        }
        ...
    }
  1. onBackPressedDispatcher 提供了在每个片段中以不同方式处理后退按键的机会。因此,您可能必须在每个片段中都提供这段代码。

片段中:

var doubleBackToExitPressedOnce = false

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    requireActivity().onBackPressedDispatcher.addCallback(this, callback)
 }

 val callback = object : OnBackPressedCallback(true ) {
    override fun handleOnBackPressed() {
       if (doubleBackToExitPressedOnce)
          requireActivity().finish()
       Toast.makeText(requireContext(), "Press again to go back", 
          Toast.LENGTH_LONG).show()
       doubleBackToExitPressedOnce = true
    }
 }
  1. 如果你想在一个地方处理所有片段的回按,你可以通过操作参考中的 doBack() 方法来实现:How to implement onBackPressed() in Fragments?

//伪代码

   fun doBack()
   {

     //find the fragment
     val fragment = supportFragmentManager.findFragmentByTag(
     //your fragment tag 
     )

     if(fragment is FragmentA)
     {

       //do something
     }
     else if(fragment is FragmentB)
     {

       //do something else
     }

     else
     {
        activity.getSupportFragmentManager().popBackStack(null, 
        FragmentManager.POP_BACK_STACK_INCLUSIVE);
     }

   }