android - 如何使用导航组件处理片段内的向上按钮
问题描述
我正在制作一个简单的笔记应用程序,我有 2 个带有导航组件的片段,一个片段有一个笔记列表,另一个用于编辑或创建新笔记。
在MainActivity
我添加
val navController = this.findNavController(R.id.host_fragment)
NavigationUI.setupActionBarWithNavController(this, navController)
然后覆盖onSupportNavigateUp()
override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(R.id.host_fragment)
return navController.navigateUp()
}
在NoteEditFragment
requireActivity().onBackPressedDispatcher.addCallback(this) {
saveOrUpdateNote(noteId, note)
}
现在按下设备中的“后退按钮”时一切正常,但是onBackPressedDispatcher.addCallback()
当我按下屏幕左上角的“向上按钮”时会触发音符。
我的问题是:我如何处理我的这个向上按钮NoteEditFragment
?
提前致谢
解决方案
最后,我找到了解决方案。
首先在activity
onCreate
方法中,我必须像我一样连接导航:
val navController = this.findNavController(R.id.host_fragment)
NavigationUI.setupActionBarWithNavController(this, navController)
然后仍然在MainActivity
覆盖onSupportNavigateUp()
:
override fun onSupportNavigateUp(): Boolean
{
val navController = this.findNavController(R.id.host_fragment)
return navController.navigateUp()
}
然后在Fragment
onCreateView
我必须启用选项菜单中:
setHasOptionsMenu(true)
然后在fragment
我覆盖onOptionsItemSelected
:
override fun onOptionsItemSelected(item: MenuItem): Boolean
{
// handle the up button here
return NavigationUI.onNavDestinationSelected(item!!,
view!!.findNavController())
|| super.onOptionsItemSelected(item)
}
注意:我认为如果您有多个选项菜单,那么我认为您必须做一个when (item)
声明来检查选择了哪个选项。
此外,如果您想处理设备后退按钮,那么您可以在您的fragment
onCreateViewMethod
:
requireActivity().onBackPressedDispatcher.addCallback(this)
{
// handle back button
// change this line to whatever way you chose to navigate back
findNavController().navigate(NoteEditFragmentDirections.actionNoteEditFragmentToNoteListFragment())
}
推荐阅读
- stack - 为什么“已检测到任务iot_thread中的堆栈溢出”不断出现?
- python - 警告:tensorflow:已编译加载的模型,但尚未构建编译的指标
- javascript - 使用 NGiNX 的 ShareX NodeJS 应用程序 - 返回 Localhost 而不是域
- r - 使用markdown转PDF时ggplot的问题
- flutter - Json Response 获取单个字段(Appwrite)
- python - 如何按时间索引从向量中访问数组
- cmd - 如何将字符串/查询写入 cmd 中的配置单元查询文件?
- c++ - 如何处理在 C++ 中定义的 C char*
- android-studio - 权限异常
- javascript - 商品数量决定销售价格 简单JS计算器