android - 带有BottomNavigationView的Android Jetpack Navigation正确返回堆栈
问题描述
OBS:虽然仍然没有一流的支持(截至撰写本文时),但谷歌现在已经更新了他们的示例,并附上了他们认为应该如何解决的示例:https ://github.com/googlesamples/android-architecture-components/tree /master/NavigationAdvancedSample
Android Codelab for Navigation很好地描述了如何将架构组件 Navigation与BottomNavigationView
. 但是假设我在Tab1和Tab2BottomNavigationView
中有 2 个标签。假设您在Tab1中浏览Frag1 --> Frag2片段。现在,每当我去Tab2,然后回到Tab1 , Frag1,2的片段返回堆栈就消失了,并再次替换为起点Frag1。
我必须在应用程序中做什么,以便即使我更改选项卡BottomNavigationView
,与Navigation一起保持其后堆栈完整?并且,还保持备份/向上按钮的行为与指南同步。
以前我通过使用ViewPager
和管理我的 selfe 的后台堆栈来完成此操作,但这感觉不像新导航的正确方法。
提前致谢!
编辑:
这里有更详细的答案。
解决方案
主要原因是您只使用一个NavHostFragment
来保存应用程序的整个后台堆栈。
所以解决方案是每个选项卡都应该拥有自己的后台堆栈。
- 在您的主布局中,用
FrameLayout
. - 每个选项卡片段都是一个
NavHostFragment
并包含自己的导航图,以使每个选项卡片段都有自己的后退堆栈。 - 添加
BottomNavigationView.OnNavigationItemSelectedListener
toBottomNavigtionView
来处理每个FrameLayout
.
如果您不想将所有片段保留在内存中,您可以使用app:popUpTo
andapp:popUpToInclusive="true"
弹出您不想保留的片段。
推荐阅读
- c# - 使用 .net 验证 GeoJson 多边形是否包含某个部分的最快方法是什么
- r - 如何在 R 中创建具有顺序文件名和数字的向量?
- devexpress - 如何启用 DevExpress 网格条件格式?
- java - readEntity(Object.class) 无法从实体流中反序列化对象
- c++ - 如何验证指向标准向量内部数组的指针
- ruby-on-rails - 带有每个循环轨道的活动记录 group_by
- python - Alien Invasion - Pygame - 外星人离开屏幕
- git - 我们可以同时提出两个主分支的拉取请求吗
- kubernetes - Kubernetes configmap yaml 缩进
- cisco - 从 cisco 设备接口清除“no switchport”命令