将项添加到索引为零的可变列表中不会更新回收视图



我在一个片段中有一个recyclerview,它显示了一个可变的任务列表,每个任务都有一个标题和描述,包装在可变的实时数据中。

private val _tasks = MutableLiveData<MutableList<Task>>()

为了添加这些项,我实现了一个底部工作表对话框片段,其中对两个值都进行了文本编辑。

当我在没有指定索引的情况下添加任务项时,recyclerview会正确更新:

_tasks.value!!.add(Task(taskEditText,descriptionEditText))

但是,当我指定我想要索引0处的新任务项,并且我添加了多个任务项时,recyclerview会反复显示我添加的第一个任务。

我尝试过的东西:

在适配器中使用notifyDataSetChanged可以正常工作并正确更新回收视图,但我尝试将其添加到底部工作表对话框中的添加任务按钮中,但它什么也没做。

我尝试将这些项目添加到临时列表中,然后将其设置为_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)
}
}

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

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

试试看。

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

相关内容

  • 没有找到相关文章

最新更新