如何在多个Activity之间共享viewModel?

8

我现在正在学习Android ViewModel。我有MainActivity和RegisterActivity两个活动,可以在其中输入姓名、年龄和电话号码。在RegisterActivity中输入完信息后,我将该信息放入ViewModel中,然后单击按钮完成RegisterActivity。问题是,我想在MainActivity中显示信息。那么我该如何在这两个活动之间共享ViewModel?我需要使用什么概念?


1
你不能在不同的活动之间共享ViewModel。而且,在这种情况下,我认为这是一种反模式。使用startActivityForResultsetResult来传递这种类型的数据。 - momvart
4个回答

29

您不能在多个活动之间共享ViewModel。这是使用多个活动的一个具体缺点,如Single Activity talk所述。


如果我想在活动之间共享数据,是否可以同时使用Intent.putExtra和Android Jetpack Navigation? - CodingBruceLee
使用共享ViewModel和使用Intent extras之间有绝对巨大的差异。startActivityForResult() / Activity Result API都可以在任何Fragment中使用,无论您是否使用Navigation。 - ianhanniballake

4

ViewModel不能在活动之间直接共享,但是如果您将ViewModelFactory存储在应用程序类中,并从活动中检索工厂对象并访问ViewModel,则可以共享ViewModel的状态。我在featureModule应用程序中检查了这种情况,它有效。


3
你能提供GitHub代码或其他什么吗? - oyeraghib

2
你可以将想要在MainActivity中保留的数据放入Application类中,或者使用SharedPreferences。

0

ViewModel 具有应用程序级别的生命周期。如果您在两个或更多活动中使用单个 ViewModel,那么在与第一个活动附加后,当它与其他活动附加时可能会出现一些问题。


4
请更新您的答案,提供适当的信息,并可能附带一些代码示例作为参考。例如,可能会出现哪些问题以及可能的解决方案等。 - A S M Sayem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接