我们如何在jetpack compose中将参数传递给viewModel?
这是我的组合
@Composable
fun UsersList() {
val myViewModel: MyViewModel = viewModel("db2name") // pass param like this
}
这是视图模型
class MyViewModel(private val dbname) : ViewModel() {
private val users: MutableLiveData<List<User>> by lazy {
MutableLiveData<List<User>>().also {
loadUsers()
}
}
fun getUsers(): LiveData<List<User>> {
return users
}
private fun loadUsers() {
// Do an asynchronous operation to fetch users.
}
}
答案 0 :(得分:2)
您需要创建一个工厂以将动态参数传递给 ViewModel,如下所示:
class MyViewModelFactory(private val dbname: String) :
ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel?> create(modelClass: Class<T>): T = MyViewModel(dbname) as T
}
然后在可组合函数中像这样使用你的工厂:
@Composable
fun UsersList() {
val myViewModel: MyViewModel =
viewModel(factory = MyViewModelFactory("db2name")) // pass param like this
}
现在您可以访问 ViewModel 中的 dbname 参数:
class MyViewModel(private val dbname) : ViewModel() {
// ...rest of the viewModel logics here
}
答案 1 :(得分:0)
通常情况下,您不需要这样做。在 android MVVM 中,视图模型通过依赖注入从存储库中获取数据。
这里是推荐的android架构的官方文档:https://developer.android.com/jetpack/guide#recommended-app-arch