如何解决更新 LiveDataViewModel 字段属性
我正在修改 ViewModel
和 LiveData
,但有一件事我无法开始工作。
我有一个保存数据的实体,这些数据显示在 View
中:
<!-- View - omitted for brevity -->
<data>
<variable
name="model"
type="ViewModel" />
</data>
<TextView
android:text="@{model.repo.name}" />
<TextView
android:text="@{model.repo.name}" />
在 ViewModel 中,LiveData 设置为:
// ViewModel
private val _repo: MutableLiveData<Repo> by lazy { MutableLiveData() }
val repo: MutableLiveData<Repo>
get() = _repo
当我从 DB(房间)接收和更新时,View
没有更新:
// ViewModel
repository.getRepo(repoId)
.subscribe { _repo.value = it }
- 我尝试更新字段:
_repo.value?.name = it.name
- 使用
BaseObservable
属性创建名为@Bindable
的东西,但效果不佳。找到了一些文章,但他们只使用了BaseObservable
,而不是ViewModel
。此外,一篇 StackOverflow 帖子提到使用BaseObservable
作为MutableLiveData
值(但仅此而已,我无法让它发挥作用) -
MediatorLiveData
- 也不走运 - 创建一个单独的
data class
包装器 _repo.value = _repo.value?.copy(name = it.name)
我认为这应该更容易?
然而,我发现当我有一个 List
时:
// ViewModel
private val _repos: MutableLiveData<List<Wrapper>> by lazy { MutableLiveData(emptyList()) }
val repos: MutableLiveData<List<Wrapper>>
get() = _repos
并重新分配MutableLiveData.value
,它按预期工作?:
repository.getRepos()
.subscribe { _repos.value = it.map { repo -> Wrapper(repo.name) } }
尝试过 LifeCycleObserver
(View
是 Fragment
):
binding.lifecycleOwner = viewLifecycleOwner
还有:
binding.lifecycleOwner = this
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。