传递 ViewModel 的 MutableLiveData 的值

Pass value of a MutableLiveData of ViewModels

我对 Android 非常陌生,我正在尝试 understand/integrate 数据绑定。

我想我遗漏了什么,因为它总是显示 null

这是我的ViewModel

class LockDetailsModel: ViewModel() {
    var name = MutableLiveData<String>()

    fun setName(name: String) {
        this.name.value = name
    }

在我的LockActivity中,我根据某个字段设置了name的值。

val viewModel: LockDetailsModel by viewModels()
viewModel.setName(unitName.toString())

在我的另一个显示布局的 activity 中,这就是我绑定模型所做的工作

 val viewModel: LockDetailsModel by viewModels()
 binding: ActivityConnectLockBinding = DataBindingUtil.setContentView(this, R.layout.activity_connect_lock)
 binding.lockDetails = viewModel
 binding.lifecycleOwner = this

它显示空:(

在此先感谢您的帮助!

您获得 null 值的原因是因为您在两个活动中都使用了 different viewModel instances,因此您首先存储的值 Activity无法在第二 activity 中获得。您需要在两个活动之间有 SharedViewModel,这是不可能的,因为 Single Activity principle。因此,要实现您想要实现的逻辑,您需要拥有 Fragments 并利用 fragment-ktx 库轻松创建 SharedViewModel 。如果您想要 example ,您可以参考我的回答是:

Want to show progress bar while moving to the previous page from the current page

以上答案描述了如何将一个 activity 中开始的下载进度获取到另一个中。