使用 OnBackPressedCallback 向后传递可打包的包
Passing a parcelable bundle backwards using the OnBackPressedCallback
在我的应用程序中,我使用 OnBackPressedCallback 并调用 findNavController.popBackStack 来管理向后导航。我遇到的一个限制是,当用户单击后退按钮时,我无法找到将可打包包传回的方法。
用例很简单:片段用户输入一些数据。当用户输入更多数据时,它会传递给 Fragment B。用户决定他们想要返回片段 A 并编辑之前的数据,所以我想将包传回,这样他们就不会丢失之前输入的数据。
使用导航组件我可以在返回导航时简单地附加捆绑包但是使用这个 OnBackPressCallback 我们不使用导航组件,因此没有任何东西可以附加捆绑包。
有人对此有任何潜在的简单解决方案吗?我已经考虑过 SharedPreferences 但是我正在传递一个对象并且 SP 只允许基元。
最简单的解决方案是将您的 parcelable 序列化为 JSON 字符串,将其保存到共享首选项,然后 de-serialise 当您需要检索该数据时将其保存。
有 2 个 well-known 和可靠的 JSON 库,如果您还没有使用或不熟悉它:您可以使用 Gson (Google) 或磨石(方形)
在我的应用程序中,我使用 OnBackPressedCallback 并调用 findNavController.popBackStack 来管理向后导航。我遇到的一个限制是,当用户单击后退按钮时,我无法找到将可打包包传回的方法。
用例很简单:片段用户输入一些数据。当用户输入更多数据时,它会传递给 Fragment B。用户决定他们想要返回片段 A 并编辑之前的数据,所以我想将包传回,这样他们就不会丢失之前输入的数据。
使用导航组件我可以在返回导航时简单地附加捆绑包但是使用这个 OnBackPressCallback 我们不使用导航组件,因此没有任何东西可以附加捆绑包。
有人对此有任何潜在的简单解决方案吗?我已经考虑过 SharedPreferences 但是我正在传递一个对象并且 SP 只允许基元。
最简单的解决方案是将您的 parcelable 序列化为 JSON 字符串,将其保存到共享首选项,然后 de-serialise 当您需要检索该数据时将其保存。
有 2 个 well-known 和可靠的 JSON 库,如果您还没有使用或不熟悉它:您可以使用 Gson (Google) 或磨石(方形)