我在 recyclerview 中有一个包含 5 个元素的列表,设置就像一个待办事项列表。每行的复选框上都有一个侦听器,出于此最小可重现示例的目的,每当您选中任何框时,它都会随机设置 5 个复选框的值。当某个项目未被选中时,它应该以黑色文本显示,当一个项目被选中时,它应该以灰色文本和斜体显示。
当我选中某个框并重置值时,通常 UI 会按预期更新。但是,有时一项会出现错误的布局,因此复选框显示正确的值,但文本样式错误。为什么这种行为不一致?如何确保每次都刷新 UI?
这是整个 MRE:
MainActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import com.dalydays.android.mre_recyclerview_refresh_last_item.databinding.ActivityMainBinding
import kotlin.random.Random
class MainActivity : AppCompatActivity() {
private lateinit var adapter: ToDoAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.lifecycleOwner = this
binding.itemsList.layoutManager = LinearLayoutManager(this)
val onCheckboxClickListener: (ToDoItem) -> Unit = { _ ->
adapter.submitList(getSampleList())
}
adapter = ToDoAdapter(onCheckboxClickListener)
binding.itemsList.adapter = adapter
adapter.submitList(getSampleList())
}
private fun getSampleList(): List<ToDoItem> {
val sampleList …Run Code Online (Sandbox Code Playgroud)