kotlin 将一个项添加到可变列表中索引为零的位置不会更新recyclerview

pxq42qpu  于 2023-05-07  发布在  Kotlin
关注(0)|答案(2)|浏览(109)

我在一个片段中有一个recyclerview,它显示了一个可变的任务列表,每个任务都有一个标题和描述, Package 在可变的实时数据中。
private val _tasks = MutableLiveData<MutableList<Task>>()
为了添加这些项,我实现了一个底部工作表对话框片段,其中包含两个值的文本编辑。
当我添加一个任务项而不指定索引时,recyclerview会正确更新:
_tasks.value!!.add(Task(taskEditText,descriptionEditText))
但是,当我指定希望新任务项位于索引0并添加多个任务项时,recyclerview displays the first task i added over and over.
我尝试过的事情:
在适配器内部使用notifyDataSetChanged可以正确地工作并更新recyclerview,但是我试图将其添加到底部工作表对话框中的添加任务按钮中,它什么也没做。
我尝试将项目添加到一个临时列表中,然后将其设置为_tasks.value,但同样的事情发生了,只有当我不指定索引时才会更新。
以下是相关文件:
AddTaskFragment(工作表底部对话框):

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    binding.lifecycleOwner = viewLifecycleOwner
    // if the textfields are not empty, adds the task and leaves the dialog
    binding.buttonAdd.setOnClickListener{
        if (binding.addTaskEditText.text!!.isNotEmpty() && binding.addDescriptionEditText.text!!.isNotEmpty()) {
            viewModel.addTask(binding.addTaskEditText.text.toString(), binding.addDescriptionEditText.text.toString())
            dismiss()
        }
    }
}

视图模型中的addTask函数:

fun addTask(taskEditText : String, descriptionEditText : String) {
    _tasks.value!!.add(0,Task(taskEditText,descriptionEditText))
}

适配器:

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val task = viewModel.tasks.value!![position]
    holder.itemTitle.text = task.text
    holder.itemDescription.text = task.description
    holder.textViewOptions.setOnClickListener {
        onMenuClick(position, holder, task)
    }
}

提前感谢,我希望你们专业人士可以帮助我

mbzjlibv

mbzjlibv1#

viewModel.tasks.observe(viewLifecycleOwner, Observer {
            adapter.notifyDataSetChanged()
        })

试试看

6jjcrrmo

6jjcrrmo2#

在幕后发生的是列表适配器检查oldList是否与新列表引用相同,在您的情况下,这是同一个列表,因此,它不会采取任何操作(查看代码)。但是当oldList在引用方面与newList不同时,它会更新回收器视图中的项。如果您想实现这一点,您可以使用不变性作为更新UI中项目的模式,或者使用recyclerview中的其他方法,如notifyItemInserted、notifyDataSetChanged等

相关问题