android - 更新 ArrayList 内容后,DiffUtil 不更新 ListAdapter

标签 android kotlin android-mvvm

我正在尝试更新 MutableLiveData 中的 ArrayList。
每当我更改 ArrayList 中的内容时,ListAdapter 都不会更新。

查看型号

private var _tileNumberList:MutableLiveData<ArrayList<TileNumber>> = MutableLiveData()

var tempTileNumberList: ArrayList<TileNumber> = ArrayList()

val tileNumberList:LiveData<ArrayList<TileNumber>>
get() = _tileNumberList

init {
    for (i in 1..9){
        for (j in 1..9){
            //tileNumberList.add(TileNumber(0,i,j))
            tempTileNumberList.add(TileNumber(0,i,j))
        }
    }

 fun onStart() {

        tempTileNumberList[count].number = 8
        _tileNumberList.value = tempTileNumberList
        count++

    }

每当我调用 onStart 方法列表值发生更改但 ListAdapter 未使用最新值更新时

主要 Activity
backTrackingViewModel.tileNumberList.observe(this, Observer {
               it?.let {
                   //adapter.submitList(null)
                   adapter.submitList( it)
               }
            Toast.makeText(
                applicationContext,
                "Hey",
                Toast.LENGTH_SHORT
            ).show()
        })

当我设置 adapter.submitList(null) 时,我的 ListAdapter 正在更新

瓷砖编号
data class TileNumber(var number:Int,val row:Int,val column:Int) {
}

我试过这个链接引用但没有用

ListAdapter not updating item in RecyclerView

https://stackoverflow.com/a/50062174/6925888 (这不是一个好的解决方案)

DiffUtil ItemCallback areContentsTheSame() always returns true after updating an item on the ListAdapter

最佳答案

我认为你应该像这样初始化 tileNumberList 列表

var tileNumberList: LiveData<ArrayList<TileNumber>> =  _tileNumberList

然后就像你正在做的那样在 MainActivity 中观察它

关于android - 更新 ArrayList 内容后,DiffUtil 不更新 ListAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60146582/

相关文章:

android - 如何在 mvvm 架构中实现 BaseActivity?不使用依赖注入(inject)

android - 从 ViewModel 通知 Activity

Android 数据绑定(bind) onLongClick 不工作

android - 在android中创建带圆角的按钮

java - 从 InstrumentationTestCase 创建通知

java - 在 Java : Cannot find symbol 中使用 Kotlin 类

lambda - Kotlin 高阶函数和单方法接口(interface)的行为?

Android资源作为主 Activity 中的成员变量

java - 保存 Edittext 并使其保留在 EditText 上

unit-testing - 我可以在 Kotlin 中使用 MockK 模拟通用(模板)私有(private)方法吗?