我有一个片段A,称为片段B或片段C。 B和C使用A提供的ViewModel。
有一阵子,我将View作为参数传递给构造函数:
但是这种方法不是一个好的解决方案,因为尝试重新打开片段时应用程序崩溃了。
无法实例化片段
什么是最好的方法?
我想创建一个newInstance方法并将viewModel作为Bundle的参数传递,但是如何将其转换为Parcelable或Serializable?
答案 0 :(得分:0)
您可能正在尝试创建自定义Fragment
构造函数,这在Android中是不允许的。
我假设您的ViewModel
是使用方法
A
内创建的
ViewModelProviders.of(this)
以这种方式创建的 ViewModel
仅应在该片段内部使用(如果您通过Object
或Singleton传递,则不会崩溃,但不应以这种方式使用)。
更好的解决方案是将所有这些片段A
,B
,C
放在一个活动中。
这样您可以致电
ViewModelProviders.of(requireActivity())
,并在所有片段中获得ViewModel
的相同实例。因此,如果您在片段ViewModel
中使用此方法获得了A
,在其中放置了一些值,然后在同一活动中将片段A
替换为片段B
,则可以调用ViewModelProviders.of(requireActivity())
再次可以访问ViewModel
的同一实例并检索值。