所以我一直在尝试学习Android,目前正在研究MVVM。所以我明白了,我们可以创建
ViewModels
作为Views
和Models
之间互动的桥梁。在 Android 中,我们可以通过扩展 ViewModel
类来创建 ViewModel
,因为这不会在配置更改时处置 ViewModel
。
似乎以下是创建 ViewModel
实例的错误方法,因为它将在每次重组时创建视图模型的新实例:
val myViewModel = MyViewModel()
我了解的其他有效方法是:
val mainViewModel by viewModels<MainViewModel>()
val mainViewModel = viewModel<MainViewModel>() // to use this, I had to add another dependency
Android 中默认使用第一个,为什么我们不只使用第一个呢?为什么我们通过添加另一个依赖项来使用第二个?他们不应该做同样的事情吗?
如果我没有意义,我真的很抱歉,前几天才开始学习。
viewModels() 和 viewModel() 之间的区别在于,对于 viewModel(),如果您需要在构造函数中提供 ViewModel 参数以便在 Compose 中创建,则可以为其提供 ViewModelProvider.Factory。
类似这样的事情
companion object {
val Factory: ViewModelProvider.Factory = viewModelFactory {
initializer {
val myRepository = MyRepository()
MyViewModel(myRepository= myRepository )
}
}
}
然后你就可以这样使用它
val myViewModel = viewModel<MyViewModel>(factory = MyViewModel.Factory)
第一种方法通常用于非组合应用程序,当您不需要工厂时