如何在更新ViewModel列表项属性时设置RecyclerView中的属性以进行更新?

时间:2019-09-10 18:39:45

标签: kotlin android-recyclerview android-livedata

我以如下方式设置项目:RecyclerView从ViewModel加载项目列表,然后显示它们。因此,ViewModel存储了一个LiveData>,RecyclerView会观察该LiveData>,并应在其发生更改时进行更新。

这在某些情况下适用,如果我想删除或添加列表中的元素,但是如果我想更新列表元素的text属性怎么办?由于这不视为修改列表,因此不会触发观察者。

基本上,有一种方法可以解决此问题。我在想,也许每当发生更改时就可以从ViewModel手动触发Observer,但是这种排序似乎违反了ViewModel的整个原理。

一些基本上下文代码

MainFragment.kt:

mViewModel.allItems.observe(activity!!, Observer { newData ->
    adapter.data = newData
})

MainAdapter.kt:

var data = listOf<Item>()
    set(value) {
        field = value
        notifyDataSetChanged()
    }

MyViewModel.kt:

private val _allItems = MutableLiveData<List<Item>>()
    val allItems: LiveData<List<Item>>
        get() = _allItems

我希望在ViewModel中运行RecyclerView时进行更新:

fun updateItem(arg : String) {
    for (item in _allItems.value!!) {
        if (item.text == arg) {
            item.text = "$arg: clicked!"
        }
    }
}

1 个答案:

答案 0 :(得分:0)

尝试重置LiveData的值:

_allItems.postValue(_allItems.value)

更新列表中的项目后