使用NavOptions setPopUpTo时返回按钮异常问题排查
我开发了一个笔记列表Fragment,用户点击笔记项时会跳转至笔记详情Fragment,采用Navigation UI结合NavOptions实现导航逻辑。
初始错误尝试及问题
最初使用以下代码实现跳转:
fun toNotePage() { val navOptions: NavOptions = NavOptions.Builder() .setPopUpTo(R.id.navigation_notes, false, true) .setRestoreState(true) .build() findNavController().navigate(R.id.navigation_note_page, null, navOptions) }
此时笔记详情页能正常打开,但返回按钮完全失效。
随后将setPopUpTo的inclusive参数改为true,代码如下:
fun toNotePage() { val navOptions: NavOptions = NavOptions.Builder() .setPopUpTo(R.id.navigation_notes, true, true) .setRestoreState(true) .build() findNavController().navigate(R.id.navigation_note_page, null, navOptions) }
这种情况下返回按钮仅首次点击有效:从详情页返回列表后,再次点击笔记进入详情页,返回按钮会失效,按下系统返回键会直接关闭整个应用。
最终可行方案
方案一:调整NavOptions参数
将inclusive参数设为false的代码可正常运行,返回按钮功能完全正常:
fun toNotePage() { val navOptions: NavOptions = NavOptions.Builder() .setPopUpTo(R.id.navigation_notes, false, true) .setRestoreState(true) .build() findNavController().navigate(R.id.navigation_note_page, null, navOptions) }
方案二:使用导航Action跳转
直接调用预定义的导航Action也能正常工作,解决了此前返回时被重定向的问题:
findNavController().navigate(R.id.action_navigation_notes_to_navigation_note_page)
内容的提问来源于stack exchange,提问作者anvlad
相关产品推荐
相关产品推荐

