android - jetpack compose 将参数传递给 viewModel
问题描述
我们如何在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.
}
}
解决方案
您需要创建一个工厂来将动态参数传递给 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
}
推荐阅读
- python-3.x - 基于重叠的 IF 语句
- python-3.x - 我想对 dask 数据框进行词形还原,但我被卡住了
- vue.js - 使用带有对象的嵌套数组时,以编程方式检查复选框不会呈现更改
- javascript - 为什么我不能从 body 标签访问子节点?
- amazon-web-services - 如何通过 PHP api 调用获取 AWS S3 存储桶位置?
- list - 向 HashMap 添加新元素但查询时未找到 - Kotlin
- typescript - 是否可以使用打字稿中的映射类型过滤掉吸气剂?
- asp.net-core - 重定向时标头中的非 ASCII 或控制字符无效
- windows - 如何添加使用我的 shell 扩展注册的 Propertysheethandler 扩展?
- node.js - Bluebird 在 mongo db 集合迁移操作中承诺并发