Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于Fragment以及嵌套子Fragment的堆栈以及退栈问题 #117

Open
soapgu opened this issue Mar 4, 2022 · 0 comments
Open

关于Fragment以及嵌套子Fragment的堆栈以及退栈问题 #117

soapgu opened this issue Mar 4, 2022 · 0 comments
Labels
problem problem or trouble 安卓 安卓

Comments

@soapgu
Copy link
Owner

soapgu commented Mar 4, 2022

  • 问题的起因

在前面一篇Navigation in Android (一)里面
我的View的结构是这样的
图片

我按下后退键,也可以正常运作导航退堆栈

但是我运用到程序里无论我导航了多少次,我按下后退都是
图片
直接消失了
图片

  • 问题原因

正式项目和demo没太大区别,主要区别在于正式程序套很多层壳(FragmentContainerView)

在Navigation增加NavHostFragment提到了

  • app:defaultNavHost="true" 属性确保您的 NavHostFragment 会拦截系统返回按钮。请注意,只能有一个默认 NavHost。如果同一布局(例如,双窗格布局)中有多个宿主,请务必仅指定一个默认 NavHost。
    我明明是加了啊

  • 主要区别,我在NavHostFragment前面套了好多层FragmentContainerView!

那我把所有父级的FragmentContainerView里面加上app:defaultNavHost="true"行不行?

答案是没有效果!

看来还是要从Fragment的概念再从头看一遍了

这里面差不多到意思了

将导航结构视为一系列层,其中 Activity 作为最外层,封装下面的每一层子 Fragment。每一层都必须有一个主要导航 Fragment。当发生返回事件时,最内层控制导航行为。一旦最内层再也没有可从其弹回的 Fragment 事务,控制权就会回到外面的下一层,此过程会一直重复,直至到达 Activity 为止。

基本上很清楚了,默认情况下就是只管默认最外层的FragmentManager是应用的主要导航,而外层只有一个Fragment,自然一退一下就退到底了

  • 问题解决

只要调用setPrimaryNavigationFragment就行了。

代码改造类似如下,所有的上层FragmentContainerView都要改造!
图片

加上代码后,一切OK了

@soapgu soapgu added 安卓 安卓 problem problem or trouble labels Mar 4, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
problem problem or trouble 安卓 安卓
Projects
None yet
Development

No branches or pull requests

1 participant