当前位置: 首页 > 知识库问答 >
问题:

使用Android Jetpack导航时,背面未保存片段视图状态

文增
2023-03-14

在我的应用程序中,我正在使用Jetpack导航组件,我遇到了一个问题,即当导航回片段时,无法保存片段状态。

当我从MainFrament导航到SettinsFrament时,它是通过溢出菜单:NavigationUI. onNavDestinationSelec(项目,Navigation.findNavController(视图));

当导航回MainFragment时,某些视图上的可见性和某些文本视图中的文本不会保存,并且我的状态机变量也已失去其状态。

我读过一些解决方案,其中根视图保存在片段中的全局变量中,虽然这解决了视图上的可见性问题,但文本视图仍然为空,状态机变量被重置。

在这种情况下,是否有适当的方法来确保保存片段状态?

共有1个答案

葛兴发
2023-03-14

如果您使用的是视图模型,那么它可以为您保存状态。然而,这只适用于简单视图。对于包含您创建的一些自定义视图的复杂视图,请确保您为这些视图分配了唯一的id,因为Android使用这些id来恢复其状态。您可以在视图上使用generateViewId()方法来执行此操作。最坏的情况是,您可能需要在视图上实现onSavedInstanceState和onRestoreInstanceState。

此外,请确保在xml或代码中未将setRetainInstance设置为false。

在执行此操作时,请确保对可拆分数据模型使用parcelize注释,因为这可以节省大量时间。

我希望你的问题通过分配唯一的ID来解决,你不必处理保存状态。祝你好运!

 类似资料:
  • 问题内容: 我想在使用Android的导航抽屉切换片段时保存片段的状态。如果该片段先前已加载,则不应刷新。可能吗? 问题答案: 要保持片段的状态,您必须在片段的内调用。它能做什么: 控制是否在活动重新创建期间保留片段实例(例如通过配置更改)。 这样可以保持活动重新创建的状态,但是在这种情况下,将不会重新创建活动,而是使用抽屉手动切换片段。在这种情况下,您不必在抽屉的click侦听器中创建新的片段,

  • 我想在使用androids导航抽屉切换片段时保存片段的状态。如果片段先前已加载,则不应刷新。有可能吗?

  • 我有一个带有导航抽屉的应用程序,一个活动和许多片段。当我改变设备方向时,我的主要活动是重新创建,出现的是我的主要片段,而不是当前片段。就像我启动应用程序时一样。 如何恢复当前片段以及与所选片段相关的数据? 我看过这篇文章,但它不起作用:用抽屉菜单保存片段状态 提前感谢那些能帮助我的人。

  • 我正在android应用程序中使用导航抽屉<每个片段都包含从internet获取数据并显示在自定义列表中的异步任务。 这是选择片段的代码: 但当我在片段之间切换时,一个异步任务再次开始加载数据<那么如何保存片段的状态呢 我在stackoverflow上尝试了所有可能的解决方案 请帮帮我

  • 我使用底部导航视图和导航组件。请告诉我如何在切换到另一个选项卡并返回旧选项卡后不销毁片段?例如,我有三个选项卡-A、B、C。我的开始选项卡是A。导航到B后,然后返回A。当我返回选项卡A时,我不希望它被重新创建。怎么做?谢谢

  • 我试图理解在导航选项卡中使用片段时如何保持片段视图状态。在我的努力中,我遇到了两个我找不到合适解决方案的问题。 我有两个选项卡,Tab1和Tab2。Tab1的布局由碎片A定义,Tab2的布局由碎片B定义。我遵循了这里给出的方法(编辑:自从提出这个问题以来,文档已经发生了变化)。 第一个问题:即使我的视图有ID,当片段被重新附加时(在选项卡切换旋转之后),它们的状态也不会完全恢复。特别是:具有ID的