我已经在我的项目中使用viewModel。但是我知道我可以通过很多方式初始化 View 模型。您知道这些方式之间的区别是什么吗?
ViewModelFactory(this,Reposityory(),意图
技术上有什么区别?
最佳答案
通过使用
viewModel = ViewModelProvider(this).get(ViewModelClass::class.java)
您正在创建范围为此Fragment/activity的ViewModelClass
实例,并且每当重新创建 Activity 时,就会分配该viewmodel的相同实例,而不是新实例viewModel = ViewModelClass()
虽然看起来是正确的,但事实并非如此。每当重新创建 Activity 时,都会分配viewtmodel的新实例。 不要尝试直接通过调用来构造ViewModel的构造函数,而是让ViewModelProvider
来完成。viewModel: ViewModelClass by viewModels()
由Android KTX提供这里delegate是ViewModel的创建。它类似于 val viewModel by lazy{
ViewModelProvider(this).get(MyViewModel::class.java)
}
viewModel : ViewModelClass by ViewModels{ ViewModelFactory(this,Reposityory(),intent)}
与val viewModel by lazy {
ViewModelProvider(this, ViewModelFactory(this,Reposityory(),intent)).get(MyViewModel::class.java)
}
关于android - 创建 View 模型的方式有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/65649963/