android - 使用 Android Jetpack 导航时,片段视图状态未在后按时保存
问题描述
在我的应用程序中,我正在使用 Jetpack 导航组件,并且在导航回片段时遇到片段状态未保存的问题。
当我通过溢出菜单
导航MainFragment
到它时:SettingsFragment
NavigationUI.onNavDestinationSelected(item, Navigation.findNavController(view));
导航回 时MainFragment
,某些视图和某些TextView
s 中的文本的可见性未保存,并且我的状态机变量也丢失了其状态。
我已经阅读了将根视图保存在片段中的全局变量中的解决方案,虽然这解决了视图的可见性问题,但TextView
s 仍然为空并且状态机变量被重置。
在这种情况下是否有适当的方法来确保保存片段状态?
解决方案
如果您使用的是视图模型,那么它可以为您保存状态。但是,这只适用于简单的视图。对于复杂的视图,包括您创建的一些自定义视图,请确保您已为这些视图分配了一个唯一的 ID,因为 Android 使用这些 ID 来恢复它们的状态。您可以在 View 上使用 generateViewId() 方法来执行此操作。在最坏的情况下,您可能需要在视图上实现 onSavedInstanceState 和 onRestoreInstanceState。
此外,请确保您没有在 xml 或代码中将 setRetainInstance 设置为 false。
在执行此操作时,请确保为您的可打包数据模型使用 parcelize 注释,因为这可以为您节省大量时间。
我希望通过分配唯一 ID 来解决您的问题,并且您不必处理保存状态。祝你好运!
推荐阅读
- ios - SwiftUI:如何将初始化程序分配给特定对象?
- c - 在 ttyS0 串行端口上获取 termios 属性时出现输入/输出错误
- java - Anypoint Studio 无法在 C:\Users\Mohammed -> [帮助 1] 创建本地存储库
- salesforce - 如何将 SAML 属性从服务提供商(Salesforce)传递到 Visualforce 页面控制器
- javascript - 为什么我的函数给我“这不是红色的”?
- insert - 可以做些什么来提高使用 batchExecute() JDBC 在 SAP HANA DB 上进行批量插入的性能
- apache - Phabricator 通知服务器 SSL 错误
- c# - VisualStudio 2019 未显示与 VisualStudio 2017 相同的 NET 框架
- sql - 函数不支持排序规则
- c++ - 在与 Odeint 结合的类中使用 Eigen Matrix Ref