视图模型作为片段构造函数上的参数



我有片段A调用片段B或片段C。 B 和 C 使用 A 提供的 ViewModel。

同时,我将视图作为构造函数上的参数传递:

  • FragmentB(val viewModel: ViewModel(
  • FragmentC(val viewModel: viewModel(

但这种方式不是一个好的解决方案,因为尝试重新打开片段时应用程序崩溃。

无法实例化片段

最好的方法是什么?

我想创建一个 newInstance 方法并将视图模型作为捆绑包上的参数传递,但是我将如何在可包裹或可序列化中转换此视图模型?

您可能正在尝试创建自定义Fragment构造函数,这在Android中是不允许的。 我假设您的ViewModel是使用方法在片段A中创建

ViewModelProviders.of(this)

以这种方式创建ViewModel应该只在这个片段中使用(如果你通过Object或单例传递它,它不会崩溃,但它不应该那样使用(。

更好的解决方案是将所有这些片段放在一个活动中ABC。 这样你可以打电话

ViewModelProviders.of(requireActivity())

并在所有片段中获取相同的ViewModel实例。因此,如果您在片段A中使用此方法获取ViewModel,请放置一些值,然后在同一活动中将片段A替换为片段B,则可以调用ViewModelProviders.of(requireActivity())再次访问ViewModel的同一实例并检索值。

相关内容

最新更新