【问题标题】:Pass value of a MutableLiveData of ViewModels传递 ViewModel 的 MutableLiveData 的值
【发布时间】:2021-09-20 09:27:38
【问题描述】:

我对 Android 非常陌生,我正在尝试理解/集成数据绑定。

我想我错过了一些东西,因为它总是显示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())

在我的另一个显示布局的活动中,这是我绑定模型的操作

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

它显示为空:(

提前感谢您的帮助!

【问题讨论】:

  • 我假设您的两个活动都没有共享您的 mutabeLiveData?

标签: android kotlin data-binding android-databinding


【解决方案1】:

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

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

上述答案描述了如何将一个活动中开始的下载进度转移到另一个活动中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2020-08-09
    • 1970-01-01
    • 2021-11-27
    • 2023-03-09
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多