android - 自定义后退按钮 - Android 导航
问题描述
我有一个表格,想在用户离开之前从用户那里得到确认消息。
当用户触摸此按钮时,我想提供自定义后退按钮:
我试试这个:
val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
}
}
requireActivity().onBackPressedDispatcher.addCallback(this,onBackPressedCallback)
但似乎只适用于为内置软件/硬件后退按钮提供自定义后退行为,而不是后退箭头按钮
我怎样才能做到这一点?
解决方案
使用onSupportNavigateUp
, 并替换yourCurrentFragmentID
为您当前的片段 ID。所有这些都应该在 MainActivity 中完成。
navController = findNavController(R.id.nav_host_fragment)
setupActionBarWithNavController(navController!!)
override fun onSupportNavigateUp(): Boolean {
return when(navController?.currentDestination?.id) {
R.id.yourCurrentFragmentID -> {
showDialog()
true
}
else -> navController?.navigateUp()!!
}
}
编辑
如果您的片段已经使用onOptionsItemSelected
,您可以通过检查来处理逻辑itemId
。
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val id = item.itemId
if (id == R.id.save) {
// your save button code logic
}else if(id ==android.R.id.home){
// display confirmation message
}
return super.onOptionsItemSelected(item)
}
推荐阅读
- karma-runner - Karma 在 DOM 中插入逗号
- augmented-reality - 如何在 Sceneform 和 ARCore 中使用 PBR 材质作为图像贴图?
- mysql - 优化了哪个查询
- angular - 角 URL 重定向
- java - 如何使用 viewModel 中的观察者方法解决“从观察者派生的匿名类”错误
- php - 如何使用“where”等雄辩的方法从对象/集合中获取特定日期
- jenkins - 使用 ansible 和 jenkins 在线编辑文件(pg_hba.conf)
- php - 如何在表单中传递多个图像并在控制器中捕获?
- javascript - 使用 CSS 滑动按钮/菜单
- node.js - 如何在不同行中的不同表情符号前面获取文本数据