Google 推出架构组件之后,就很想把项目使用 MVVM 重构一波。其中 Navigation 组件是我打算实现单 Activity 架构的关键组件(这里指的不是一个 app 就一个 activity,而是只有一个 MainActivity,其他还有 LoginActivity,SplashActivity 等)。
MainActivity 中有 NavHostFragment 和 BottomNavigationView 实现底部导航(假设有三个 tab),我想所有 Fragment 页面都在这个 NavHostFragment 中导航,但是遇到一个问题,就是 BottomNavigationView 一直都显示在底部,点击底部导航 tab,整个页面操作栈就乱了。
从起始在首页的三个 fragment 导航到其他子 fragment 的时候,把 BottomNavigationView 隐藏,然后回到起始的 fragment 的时候再显示出来。
但是我觉得这个方法有种说不出来的不合理。各位大佬有其他解决方法吗,请赐教~
1
hugedeffing 2020-04-01 11:03:14 +08:00
我也是用 navController.addOnDestinationChangedListener 判断当前 fragment,然后进行 bottom 显示隐藏……
另外由于没有滑动切换 fragment,我还加了手势判断。 我也等等看有没有其他方式…… |
2
whyrookie 2020-04-01 11:25:52 +08:00
插个楼,BottomNavigationView+Navigation 每次点击 tab 都会重新创建 fragment,挺难受的,感觉没有特别好的方案?楼主的问题我也感觉怪怪的,不是很合理,我个人喜欢,进到下一个模块使用单独的 Activity.
|
3
qingmei2 2020-04-01 11:29:21 +08:00
个人认为这种方式有点太极端了,我对其理解应该这样:
MainActivity - MainFragment(这个才应该是 Destination) - ViewPager+BottomNavigationView - 3 个 SubFragment 也就是说不将 SubFragment 视为 Destination 以及导航行为的发起者,页面间的导航都委托给 MainFragment,当其他页面返回 MainFragment 时,再将 result 事件分发给 SubFragment,这样从层级上来说会清晰非常多。 说白了就是目前原生提供的 API 中对多栈支持力度还不太够,Google 官方已经不止一次提出 Fragment 即将迎来重要的重构,可以再等等。 个人浅见,欢迎讨论。 |
4
wuz 2020-04-01 13:17:04 +08:00
单个 activity 多个 fragment 这种思路不太好,建议换一下
|
5
wobuhuicode 2020-04-01 14:21:56 +08:00
不明白这几年 谷歌那帮人在搞啥。以前的那套 MVP 就是乱七八糟的,现在的 MVVM 更加惨不忍睹。
方向摇摆不定的。该补的没补。 |
6
sankemao 2020-04-01 15:24:40 +08:00
我现在用的 3l 的思路,但是有个问题,如果你为 fragment 设置了进场出场动画,当布局复杂的时候就会卡顿
|
7
defendhairline1 OP @wuz 想用单 Activity 的目的就是为了,方便管理应用内全局统一弹窗,统一网络监控,实现不需要任何权限的悬浮按钮等。但栈管理啥的确实不如 Activity 完善
|
8
defendhairline1 OP @qingmei2 可以的,使用 MainFragment 作为 Start Destination 的思路很好 。 赞!感谢老哥
|