如何使用导航组件将fragment实例保存在bottomNavigationView上

问题描述 投票:0回答:3

我正在使用导航组件在底部导航视图片段之间进行导航。但是片段状态正在保存,每次我访问该菜单项时它都会创建。

根据此更新 - https://developer.android.com/jetpack/androidx/releases/navigation#2.5.0-alpha04组件正在保存状态。

android android-fragments navigation bottomnavigationview
3个回答
2
投票

只有设置了“id”的视图才会在 Jetpack Navigation 中保留片段状态。没有任何“id”的视图将不会保留其状态。另外,您应该将 AppBarConfiguration 与 NavController 一起使用。有 AppBarConfiguration 的示例可以查找。

最后也是最重要的,不要在导航图 xml 文件中使用“app:popUpTo”和“app:popUpToInclusive”属性来执行操作。一旦触发操作,这将弹出所有片段,直到返回堆栈中的“app:popUpTo”片段为止。


0
投票

如果您不想将片段保存到后台,请使用此行到该片段的 nav_graph

     <fragment
       android:id="@+id/fragment1"
       android:name="fragmentClassName" >
      <action
       android:id="@+id/action_Fragment1_to_Fragment2"
       app:destination="@id/Fragment2_id"
       app:popUpTo="@+id/your_root_graph_id"
       app:popUpToInclusive="true" />

0
投票

从导航组件版本 2.7.6 开始,这是不可能的。相信我,我尝试了一切。每当您使用导航组件切换底部导航栏时,新选项卡每次都会重新创建片段。这不是软重新创建,其中片段的实例是相同的,因此您可以保存视图并每次返回它,片段本身被重新创建。

例如,当您有选项卡 A、B 和 C 时,并且从选项卡 A 开始。当您将选项卡切换到 B 时,片段 B 将被重新创建为新实例,其所有变量都将重置为 null。当你去C时,同样的事情。然而,当您返回 A 时,它不会创建片段 A 的新实例,而是相同的实例,但将调用 onCreateView,此时您可以返回保存的 rootView 来恢复状态。没有办法像B和C中的A那样“恢复”状态。这是不可能的。你需要想出另一种方法。谷歌文档/博客具有误导性,并且无法从非第一个/初始选项卡的其他选项卡恢复片段。

© www.soinside.com 2019 - 2024. All rights reserved.