我在一個片段中有一個 recyclerview,它顯示一個可變的任務串列,每個任務都有一個標題和描述,包裝在可變的實時資料中。
private val _tasks = MutableLiveData<MutableList<Task>>()
為了添加這些專案,我實作了一個底部作業表對話框片段,其中包含兩個值的文本編輯。
當我在未指定索引的情況下添加任務項時,recyclerview 會正確更新:
_tasks.value!!.add(Task(taskEditText,descriptionEditText))
但是,當我指定我想要索引 0 處的新任務項并添加多個任務項時,recyclerview會一遍又一遍地顯示我添加的第一個任務。
我嘗試過的事情:
在配接器內使用 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()
}
}
}
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)
}
}
在此先感謝,我希望您的專業人士可以幫助我
uj5u.com熱心網友回復:
viewModel.tasks.observe(viewLifecycleOwner, Observer {
adapter.notifyDataSetChanged()
})
試試看。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/411982.html
標籤:
上一篇:處理程式是否屬于創建它的執行緒?
下一篇:如何在按下的按鈕上顯示資訊
