我想观察一个 MutableList,因此当从 MutableList 添加或删除项目时,DiffUtil 将更新 RecycerView。我认为更新列表的最佳方法是使用 LiveData,但我无法在 MutableList 中添加或删除项目。
我一直在关注下面的这个代码实验室来尝试帮助我。
https://codelabs.developers.google.com/codelabs/kotlin-android-training-diffutil-databinding/#4
主要活动
class MainActivity : AppCompatActivity() {
val list: LiveData<MutableList<User>>? = null
var mAdapter = RVAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
addUser()
val rv = findViewById<RecyclerView>(R.id.recycler_view)
rv.apply {
LayoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false)
adapter = mAdapter
}
list?.observe(viewLifeCycleOwner, Observer {
it?.let {
mAdapter.submitList(it)
}
}
}
private fun addUser() {
list.add(User("Shawn", 1)
list.add(User("Shannon", 2)
list.add(User("Steve", 3)
list.add(User("Sara", 4)
}
}
用户数据类
data class User(val name: String, val accountNumber: Int) {
}
适配器
class RVAdapter : ListAdapter<User, RVAdapter.ViewHolder>(MyDiffCallback()) {
class MyDiffCallback : DiffUtil.ItemCallback<User>() {
override fun areItemsTheSame(oldItem: User, newItem: User): Boolean {
return oldItem.name == newItem.name
}
override fun areContentsTheSame(oldItem: User, newItem: User): Boolean {
return oldItem == newItem
}
}
...
}
这是我目前的代码,我无法从列表中添加或删除项目,并且 ViewLifecycleOwner 未定义。