首页 > 解决方案 > 使用 Android Jetpack 导航时,片段视图状态未在后按时保存

问题描述

在我的应用程序中,我正在使用 Jetpack 导航组件,并且在导航回片段时遇到片段状态未保存的问题。

当我通过溢出菜单 导航MainFragment到它时:SettingsFragmentNavigationUI.onNavDestinationSelected(item, Navigation.findNavController(view));

导航回 时MainFragment,某些视图和某些TextViews 中的文本的可见性未保存,并且我的状态机变量也丢失了其状态。

我已经阅读了将根视图保存在片段中的全局变量中的解决方案,虽然这解决了视图的可见性问题,但TextViews 仍然为空并且状态机变量被重置。

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

标签: androidandroid-fragmentsandroid-architecture-navigation

解决方案


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

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

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

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


推荐阅读