导航组件,添加或替换片段或其他诸如隐藏显示片段的内容

时间:2018-11-06 10:31:37

标签: android kotlin android-architecture-navigation

我们如何在Navigation组件中指定替换或添加片段?

NavHostFragment.findNavController(this).navigate(R.id.action_splashFragment_to_categoriesFragment)

2 个答案:

答案 0 :(得分:0)

Jetpack导航组件目前支持替换片段。

不支持添加片段

当按下后退按钮时将api数据保留在片段中的解决方法是将数据(片段viewstate)保存在ViewModel中并在onViewCreated()中进行检查,或者使用“全屏DialogFragments”。对于对话框片段,请检查此https://gist.github.com/utkukutlu/bd2e37253e7184179d923321e3ea72c1

答案 1 :(得分:-1)

如果您仅使用findNavController().navigate(R.id.someDestinationId),则等于fragmentManager.add,但是如果您想要替换行为,并且您不希望用户能够按下并重新加载上一个活动,则应该执行像这样:

findNavController().navigate(R.id.homeFragment, null, NavOptions.Builder()
                .setPopUpTo(R.id.loginFragment, true)
                .build())

在这种情况下,我位于 LoginFragment 中,并且我想导航到 HomeFragment ,并且我也想替换当前的片段,以使用户无法按下并再次加载 LoginFragment