有没有一种方法可以导航到目的地,并在NavigationManager中将另一个添加到backtstack?

时间:2019-05-28 10:34:27

标签: android navigation jetpack

嗨,我是android NavigationManager的新手。

考虑在nav_graph中连接的片段A,B和C,如图所示。 scheme

基本上,我想要实现的是直接从片段A导航到C。但是,当单击“后退”按钮时,我希望它的行为就像我第一次进入片段B。

所以A-> C,在后退按钮上:C-> B-> A

有没有办法,如何在不使用NavigationManager实际显示片段B的情况下将片段B添加到后堆栈?

谢谢。

1 个答案:

答案 0 :(得分:2)

因此,看来阅读文档时我应该格外小心。我错过了this site

有自定义后退行为的机制。我要做的就是将这段代码添加到片段C类中:

//use onResume if you want to handle orientation change
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val callback = requireActivity().onBackPressedDispatcher.addCallback(this, object :
        OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            val options = NavOptions.Builder()
                .setPopUpTo(R.id.fragmentC, true)
                .build()

            navController.navigate(R.id.fragmentB, options)
        }
    })
}

我的心态一直都是错误的。我试图在启动C时将B添加到后堆栈中。我不得不在按下后退按钮的片段C中要做的是前进到B并从后堆栈中删除C。