繁体   English   中英

带抽屉布局的底部导航 | 片段中的 onBackPressed

[英]Bottom Navigation with Drawer Layout | onBackPressed in Fragment

我有一个有趣且令人困惑的问题。

我有一个从Bottom Navigation打开的Drawer Layout ,就像照片一样

屏幕:
在此处输入图片说明

为了从Bottom Navigation打开Drawer Layout ,我使用了以下代码:

    bottomNavigationView.setOnItemSelectedListener { item ->
            when (item.itemId) {
                R.id.itemDrawer -> {
                    drawerLayout.openDrawer(GravityCompat.END)
                    return@setOnItemSelectedListener false
                }
                R.id.homeFragment -> navController.navigate(R.id.homeFragment)
                R.id.booksFragment -> navController.navigate(R.id.booksFragment)
                R.id.grammarFragment -> navController.navigate(R.id.grammarFragment)
                R.id.translatorFragment -> navController.navigate(R.id.translatorFragment)
            }
            true
        }

这就是我的问题

当我覆盖底部导航的侦听器时,在我看来, onBackPressed行为默认会变得混乱。

我的意思是当我点击Home ,然后是另一个元素,然后是Home ,等等几次,我停留在Home Fragment并点击onBackPressed ,然后我没有离开应用程序,而是回到我所在的片段以前是

我认为这对用户来说是不正常的

我该怎么办?

我想以某种方式覆盖Home Fragment onBackPressed ,但我不明白该怎么做

您可以在HomeFragment使用onBackPressedDispatcher ,可以在onViewCreated()上实现,即

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    activity?.onBackPressedDispatcher?.addCallback(object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                moveTaskToBack(true)
                exitProcess(ZERO)
            }
        }
    )
}

我找到了答案。

一切都与所选答案中的一样,但需要在此fragmentonPause中删除此callback 防止应用程序从所有片段关闭

1. 为callback创建一个变量

private lateinit var mCallback: OnBackPressedCallback

2. 在onViewCreated

mCallback = object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                activity?.moveTaskToBack(true)
                exitProcess(0)
            }
        }

activity?.onBackPressedDispatcher?.addCallback(mCallback)

3. 关闭fragment时移除callback

 override fun onPause() {
        mCallback.remove()
        super.onPause()
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM