一个 App 只有一个 MainActivity 牵扯到 Navigation 组件的问题

2020-04-01 09:56:51 +08:00
 defendhairline1

Google 推出架构组件之后,就很想把项目使用 MVVM 重构一波。其中 Navigation 组件是我打算实现单 Activity 架构的关键组件(这里指的不是一个 app 就一个 activity,而是只有一个 MainActivity,其他还有 LoginActivity,SplashActivity 等)。

问题来了

MainActivity 中有 NavHostFragment 和 BottomNavigationView 实现底部导航(假设有三个 tab),我想所有 Fragment 页面都在这个 NavHostFragment 中导航,但是遇到一个问题,就是 BottomNavigationView 一直都显示在底部,点击底部导航 tab,整个页面操作栈就乱了。

我的做法

从起始在首页的三个 fragment 导航到其他子 fragment 的时候,把 BottomNavigationView 隐藏,然后回到起始的 fragment 的时候再显示出来。
但是我觉得这个方法有种说不出来的不合理。各位大佬有其他解决方法吗,请赐教~

9596 次点击
所在节点    Android
8 条回复
hugedeffing
2020-04-01 11:03:14 +08:00
我也是用 navController.addOnDestinationChangedListener 判断当前 fragment,然后进行 bottom 显示隐藏……
另外由于没有滑动切换 fragment,我还加了手势判断。

我也等等看有没有其他方式……
whyrookie
2020-04-01 11:25:52 +08:00
插个楼,BottomNavigationView+Navigation 每次点击 tab 都会重新创建 fragment,挺难受的,感觉没有特别好的方案?楼主的问题我也感觉怪怪的,不是很合理,我个人喜欢,进到下一个模块使用单独的 Activity.
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 即将迎来重要的重构,可以再等等。

个人浅见,欢迎讨论。
wuz
2020-04-01 13:17:04 +08:00
单个 activity 多个 fragment 这种思路不太好,建议换一下
wobuhuicode
2020-04-01 14:21:56 +08:00
不明白这几年 谷歌那帮人在搞啥。以前的那套 MVP 就是乱七八糟的,现在的 MVVM 更加惨不忍睹。
方向摇摆不定的。该补的没补。
sankemao
2020-04-01 15:24:40 +08:00
我现在用的 3l 的思路,但是有个问题,如果你为 fragment 设置了进场出场动画,当布局复杂的时候就会卡顿
defendhairline1
2020-04-01 16:19:55 +08:00
@wuz 想用单 Activity 的目的就是为了,方便管理应用内全局统一弹窗,统一网络监控,实现不需要任何权限的悬浮按钮等。但栈管理啥的确实不如 Activity 完善
defendhairline1
2020-04-01 16:30:00 +08:00
@qingmei2 可以的,使用 MainFragment 作为 Start Destination 的思路很好 。 赞!感谢老哥

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/658194

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX