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

Android导航组件:如何保存片段状态

袁鸿畅
2023-03-14

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

共有3个答案

陶唯
2023-03-14

只需使用导航组件版本2.4.0-alpha01或更高版本

沈建柏
2023-03-14

如果您可以处理销毁片段,但希望保存ViewModel,则可以将其范围扩展到导航图中:

private val viewModel: FavouritesViewModel by 
    navGraphViewModels(R.id.mobile_navigation) {
        viewModelFactory
    }

在此处阅读更多信息

编辑

正如@SpiralDev所指出的,使用Hilt可以简化一点:

private val viewModel: MainViewModel by 
    navGraphViewModels(R.id.mobile_navigation) {
         defaultViewModelProviderFactory     
    }
徐智渊
2023-03-14

根据公开问题,导航不直接支持多个回栈-即,当您从A或C返回B时保存堆栈B的状态,因为Fragments不支持多个回栈。

根据该评论:

NavigationAdvancedSample现在位于https://github.com/googlesamples/android-architecture-components/tree/master/NavigationAdvancedSample

此示例使用多个NavHostFragments,每个底部导航选项卡都有一个,以解决片段API在支持多个反向堆栈方面的当前限制。

我们将继续使用片段API来支持多个后台堆栈,并在创建后将导航API插入其中,这将消除对类似导航扩展(NavigationExtensions)的任何需求。kt文件。我们将继续使用此问题跟踪这项工作。

因此,您现在可以在您的应用程序中使用NavigationAdvancedSample方法并对问题进行星标处理,以便在解决底层问题并将直接支持添加到导航时获取更新。

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

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

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

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

  • 我是Android开发新手,所以我不明白很多,也许是基本的东西,也许甚至陈述的主题也没有完全反映我的问题,我事先道歉,我不能更准确地表述。请帮我回答一些问题。 我的应用程序中有一个底部导航,有三个菜单项。就像图片上一样: 底部导航 最初,我是按照标准的Android Studio示例来做的: 在这段代码中,菜单项切换片段,保存每个片段的状态(我不知道具体如何,它似乎在导航控制器内部的某个地方)。

  • 我有一个HomeActivity,我从中调用片段列表。在HomeActivity中,我有一个侧菜单,其中加载了所有片段。 现在,在这个列表中,我有一个名为HomeFraank的片段,它使用webservice显示带有数据的Google地图。 我想要的是我想加载Map dat只加载一次(第一次)片段,而不是每次单击sidemenu或从任何其他片段进来时。 我的HomeFragment或任何其他片段会