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

posted on 2025-11-17 22:59  少杨  阅读(2)  评论(0)    收藏  举报