android compose viewModel 传参数
android compose viewModel 传参数
在MainActivity 里面可以用viewModels
val userDao = db.userDao()
val viewModel by viewModels<MyArticleViewModel>(
factoryProducer = {
object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return MyArticleViewModel(userDao) as T
}
}
}
)
在Compose 里
class UserViewModelFactory(private val dao: UserDao) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MyArticleViewModel::class.java)) {
@Suppress("UNCHECKED_CAST")
return MyArticleViewModel(userDao ) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
val factory = UserViewModelFactory(userDao)
val viewModel: MyArticleViewModel = viewModel(factory = factory)
参考:https://medium.com/@ahmed.ally2/ways-to-pass-parameters-to-a-viewmodel-b2fbba7c12b7
浙公网安备 33010602011771号