[英]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)
}
}
)
}
我找到了答案。
一切都与所选答案中的一样,但需要在此fragment
的onPause
中删除此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.