首页 > 解决方案 > DiffCallBack 没有被调用?

问题描述

所以,我有一个ListAdapter,我每次都使用adapter.submitList()在我的适配器中传递新列表,但奇怪的是它只第一次提交列表,下一次它只是不显示里面的项目适配器这是我提交列表的方式

 private fun insertListToRv() {
        val mName = editText_checkbox.text.toString()
        val isChecked = false

        if (mName == "") {
            Toast.makeText(requireContext(), "Please fill out all fields.", Toast.LENGTH_SHORT)
                .show()
        } else {

            val newListData = TaskList(
                mName,
                isChecked,
                0,
                mNoteId
            )
            itemList.add(newListData)
            adapter.submitList(itemList)
            Log.d("TAG2","Current List: ${adapter.currentList}")
            counter++
            editText_checkbox.setText("")
        }


    }

这里,itemList 是一个全局变量,初始化为 ArrayList()

var itemList: MutableList<TaskList> = ArrayList()

我什至在我的 DiffCallBack 中放置了一些日志语句,在这种情况下它只被调用一次,之后它根本不会被调用。这是我的 DiffCallBack 类

class DiffCallBack(
) : DiffUtil.ItemCallback<TaskList>() {
    override fun areItemsTheSame(oldItem: TaskList, newItem: TaskList): Boolean {
        Log.d("TAG3","Inside")
        return oldItem.Taskid == newItem.Taskid

    }

    override fun areContentsTheSame(oldItem: TaskList, newItem: TaskList): Boolean {
        Log.d("TAG3","Inside")
        return oldItem == newItem

    }


}

我还调试了我的代码,并注意到我的 adapter.currentList 正在更新。这个实现可能有什么问题?

标签: javaandroidkotlinmvvmandroid-livedata

解决方案


看来问题可能会重复使用相同的列表

val newListData = TaskList(
                mName,
                isChecked,
                0,
                mNoteId
            )
       val adapterList = itemList + newListData
       adapter.submitList(adapterList)

推荐阅读