小编lin*_*rox的帖子

为什么在带有数据绑定的recyclerview中UI有时无法更新?

我在 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)

android kotlin android-recyclerview android-databinding

5
推荐指数
1
解决办法
1646
查看次数