将项目添加到索引为零的可变列表不会更新 recyclerview
Adding an item to a mutable list at index zero doesnt update the recyclerview
我在一个片段中有一个 recyclerview,它显示一个可变的任务列表,每个任务都有一个标题和描述,包裹在可变的实时数据中。
private val _tasks = MutableLiveData<MutableList<Task>>()
为了添加这些项目,我实现了一个底部 sheet 对话框片段,其中包含两个值的文本编辑。
当我在没有指定索引的情况下添加任务项时,recyclerview 会正确更新:
_tasks.value!!.add(Task(taskEditText,descriptionEditText))
但是,当我指定我想要索引 0 处的新任务项并添加多个任务项时,recyclerview displays the first task i added over and over.
我尝试过的事情:
在适配器内部使用 notifyDataSetChanged 可以正常工作并正确更新 recyclerview,但是我尝试将它添加到底部 sheet 对话框中的添加任务按钮,但它什么也没做。
我尝试将项目添加到临时列表,然后将其设置为 _tasks.value 但同样的事情发生了,只有在我没有指定索引时才会更新。
相关文件如下:
AddTaskFragment(底部 Sheet 对话框):
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()
}
}
}
viewmodel 中的 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()
})
试试吧。
我在一个片段中有一个 recyclerview,它显示一个可变的任务列表,每个任务都有一个标题和描述,包裹在可变的实时数据中。
private val _tasks = MutableLiveData<MutableList<Task>>()
为了添加这些项目,我实现了一个底部 sheet 对话框片段,其中包含两个值的文本编辑。
当我在没有指定索引的情况下添加任务项时,recyclerview 会正确更新:
_tasks.value!!.add(Task(taskEditText,descriptionEditText))
但是,当我指定我想要索引 0 处的新任务项并添加多个任务项时,recyclerview displays the first task i added over and over.
我尝试过的事情:
在适配器内部使用 notifyDataSetChanged 可以正常工作并正确更新 recyclerview,但是我尝试将它添加到底部 sheet 对话框中的添加任务按钮,但它什么也没做。
我尝试将项目添加到临时列表,然后将其设置为 _tasks.value 但同样的事情发生了,只有在我没有指定索引时才会更新。
相关文件如下:
AddTaskFragment(底部 Sheet 对话框):
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()
}
}
}
viewmodel 中的 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()
})
试试吧。