android - Jetpack Compose 将参数传递给 viewModel

标签 android kotlin android-viewmodel android-jetpack-compose

我们如何将参数传递给 viewModelJetpack Compose ?
这是我的可组合

    @Composable
    fun UsersList() {
      val myViewModel: MyViewModel = viewModel("db2name") // pass param like this
    }

这是viewModel
    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
}

关于android - Jetpack Compose 将参数传递给 viewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67982230/

相关文章:

android - ViewModel 在同一 Activity 中跨 Fragments 的范围

android - 右对齐 ListView 项目中的 2 个 TextView

java - 在 TextView 上打印数组值(android)

android - 有没有可能制作一个即使手机锁定也可以打开的应用程序?

android - 执行 fragment 交易时,主屏幕有时会闪烁

android - 在 Kotlin 中为小于或等于 16 的 API 级别创建 Date 对象

android - 在 Android 的 onClickListener 中多次观察到 LiveData

android - Android 源代码覆盖如何工作?

android - 在 Animation 类中找不到名称为 mListener 的字段

android - Kotlin 协程等待 2 个或更多不同的并发请求