是否可以在
Activity
或 Fragment
开始时使用 RecyclerView
添加元素,在该列表的整个生命周期中都无法进行更改?
例如:
class CategoryRecyclerAdapter(
private val onItemLongClickListener: (Category) -> Unit = { },
private val onItemClickListener: (Category) -> Unit = { }
) : Adapter<CategoryRecyclerAdapter.ViewHolder>() {
private val items: MutableList<Category> = mutableListOf()
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
): CategoryRecyclerAdapter.ViewHolder {
val binding =
CategoryItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: CategoryRecyclerAdapter.ViewHolder, position: Int) {
if (items.isNotEmpty()) {
holder.bind(items[position])
}
}
override fun getItemCount(): Int = items.size
inner class ViewHolder(private val binding: CategoryItemBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(item: Category) {
binding.root.setOnLongClickListener {
onItemLongClickListener(item)
true
}
binding.root.setOnClickListener {
onItemClickListener(item)
}
binding.nameTextView.text = item.name
}
}
fun set(elements: List<Category>) {
val currentSize = this.items.size
this.items.clear()
this.items.addAll(elements)
this.notifyItemRangeRemoved(0, currentSize)
this.notifyItemRangeInserted(0, elements.size)
}
}
我需要将一个元素添加到列表的开头,将另一个元素添加到列表的末尾,以便它们始终保持列表的第一个和最后一个元素,无论添加或删除其他元素多少次。
只需用“空白”数据预填充您的列表,然后在
onBindViewHolder
中对该项目执行任何您想要的操作,或者在 ViewHolder
中使用不可更改的数据创建单独的 onCreateViewHolder
。
有大量关于“如何将 RecyclerView 与多种 ViewHolder 类型一起使用”的教程。另外,我建议使用 Jetpack Compose 或至少使用 Airbnb 的 Epoxy。