diffcallback没有被调用?

nom7f22z  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(318)

因此,我有一个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正在更新。这种实现可能有什么问题?

ukxgm1gy

ukxgm1gy1#

试着这样做:

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)

        //I have added this line code
        adapter.notifyDataSetChanged()

        Log.d("TAG2","Current List: ${adapter.currentList}")
        counter++
        editText_checkbox.setText("")
    }

我已经在某个地方读到堆栈溢出我不记得在哪里。为了使用diffcallback方法,你必须实现room!所以要注意这个!!否则,您必须创建一个定制的diffcallback。所以不要浪费你的时间:)我在自己的项目中找了好几个小时都失去了时间。你可以用我上面的答案。如果你想要动画,你必须指定插入,删除等项目的范围。。。

vwhgwdsa

vwhgwdsa2#

似乎这个问题可以重复使用同一个列表

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

相关问题