有没有办法在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)
}
}
字符串
我需要将一个元素添加到列表的开头,另一个添加到列表的结尾,以便它们始终保持列表的第一个和最后一个元素,无论添加或删除其他元素多少次。
1条答案
按热度按时间rjee0c151#
只需在列表中预先填充“空白”数据,然后在
onBindViewHolder
中对该项目执行任何您想要的操作,或者使用不可更改的数据在onCreateViewHolder
中创建一个单独的ViewHolder
。有很多关于“如何使用RecyclerView与几种ViewHolder类型”的教程。此外,我建议使用Jetpack Compose或至少Airbnb的Epoxy。