Android 导航组件 ActionBar Up/Parent 事件处理
Android Navigation Component ActionBar Up/Parent event handling
所以我在我的应用程序中使用 Android 导航,我 运行 进入这种情况:
我有 2 个片段 A -> B,现在每当用户从 B -> A 返回时,我想在返回事件之前显示一个警报。
我按照 的回答,得到了这个解决方案:
// code on fragment B's onViewCreated()
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
alert("Are you sure to quit?")
}
当我按下硬件后退按钮时,此解决方案运行良好,但当我按下工具栏上的后退按钮时,回调不会被调用。请帮助我,谢谢。
这里是我的 MainActivity 的导航设置:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
navController = findNavController(R.id.nav_host_fragment_container)
appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)
}
您需要添加如下代码-
override fun onSupportNavigateUp(): Boolean {
alert("Are you sure to quit?")
return false
}
在 onCreateView
的片段 B 中启用选项菜单
setHasOptionsMenu(true)
并覆盖 onOptionsItemSelected
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) { // ActionBar back/parent button is pressed
// onBackPressed() // to return back to Fragment A
}
return true
}
所以我在我的应用程序中使用 Android 导航,我 运行 进入这种情况:
我有 2 个片段 A -> B,现在每当用户从 B -> A 返回时,我想在返回事件之前显示一个警报。
我按照
// code on fragment B's onViewCreated()
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
alert("Are you sure to quit?")
}
当我按下硬件后退按钮时,此解决方案运行良好,但当我按下工具栏上的后退按钮时,回调不会被调用。请帮助我,谢谢。
这里是我的 MainActivity 的导航设置:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
navController = findNavController(R.id.nav_host_fragment_container)
appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)
}
您需要添加如下代码-
override fun onSupportNavigateUp(): Boolean {
alert("Are you sure to quit?")
return false
}
在 onCreateView
的片段 B 中启用选项菜单
setHasOptionsMenu(true)
并覆盖 onOptionsItemSelected
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) { // ActionBar back/parent button is pressed
// onBackPressed() // to return back to Fragment A
}
return true
}