【发布时间】:2019-12-03 09:21:00
【问题描述】:
如何在重新创建活动实例后重新创建使用通过Factory 注入的参数创建的ViewModel?
ViewModel 有一个这样的构造函数:
class MyViewModel(
val model: MyModel,
val repository: MyRepository
) : ViewModel()
我用工厂实例化它:
ViewModelProviders
.of(this, MyViewModelFactory(
model = MyModel()
repository = MyRepository()))
.get(MyViewModel::class.java)
我试图像这样恢复ViewModel,而savedInstanceState 不为空(重新创建活动):
ViewModelProviders
.of(this)
.get(MyViewModel::class.java)
这会导致崩溃,因为 no 0 arguments constructor 存在于 MyViewModel 类中。
如,每次通过工厂:
我的问题是,无论我作为MyModel 传递给ViewModel,并且来自活动Intent,都可能在以后由于用户交互而改变。这意味着,在重新创建时,Intent 中的 MyModel 已过时,已存储在 ViewModel 中并被用户交互篡改。
【问题讨论】:
-
您的 ViewModel 在活动重新创建期间将被保留(连同它所持有的数据)。 Activity 重新创建后,您不必重新创建它,Android 系统会为您完成。
标签: android android-architecture-components android-viewmodel android-mvvm