sas*_*568 5 android android-fragments kotlin android-architecture-navigation
我有一个看起来像这样的导航
Frag1 -> Frag2 -> Frag3
Run Code Online (Sandbox Code Playgroud)
里面Frag2有一个NavHostFragment有自己的导航
InnerFrag1 -> InnerFrag2
Run Code Online (Sandbox Code Playgroud)
如果我这样做
Frag2InnerFrag2内部Frag2Frag3然后我会看到InnerFrag2里面Frag2,当我正常按回时,我会从里面进入InnerFrag2,InnerFrag1但Frag2现在它会变成Frag1。
这是我里面的导航处理Frag2
private val backPressedCallback = OnBackPressedCallback {
navHostFragment.navController.navigateUp()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
requireActivity().addOnBackPressedCallback(backPressedCallback)
}
override fun onDestroyView() {
activity?.removeOnBackPressedCallback(backPressedCallback)
super.onDestroyView()
}
private val navHostFragment: NavHostFragment
get() = childFragmentManager.findFragmentById(R.id.innerNavHostFragment) as NavHostFragment
Run Code Online (Sandbox Code Playgroud)
当返回到Frag2导航主机中的片段时是正确的,但是向后导航会远离,Frag2因为内部导航主机的返回堆栈丢失。我可以以某种方式坚持它或以其他方式修复它吗?
编辑:实际上,当从 到Frag3时,Frag2我看到InnerFrag1里面,两者看起来很相似,这就是为什么此时返回会让我回到Frag1
编辑2:我发现了我的问题,我从这样的Frag2代码中膨胀了导航onViewCreated
val navHostFragment = (frag2NavHostFragment as? NavHostFragment) ?: return
val inflater = navHostFragment.navController.navInflater
val graph = inflater.inflate(navigationId)
navHostFragment.navController.graph = graph
Run Code Online (Sandbox Code Playgroud)
在 xml 中设置它使其工作,我仍然需要以某种方式从代码中设置它,Frag2根据其参数选择要使用的导航
现在我的问题从Navigation's back stack is lost改为How to preserve NavHostFragment's state when settings it's graph from code
经过一番研究后,原来的问题没有多大意义,我将其删除,但它得到了 2 票 \xc2\xaf\\_(\xe3\x83\x84)_/\xc2\xaf
\n\n我通过在膨胀图表之前添加一项检查解决了我的问题,因此NavHostFragment只有在图表还没有的情况下才会设置该图表。
try {\n navHostFragment.navController.graph\n } catch (e: IllegalStateException) {\n val inflater = navHostFragment.navController.navInflater\n val graph = inflater.inflate(navigationId)\n navHostFragment.navController.graph = graph\n }\nRun Code Online (Sandbox Code Playgroud)\n\nNavController.getGraph不返回 null,而是抛出IllegalStateException,因此奇怪的检查
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |