android RecyclerView中的不可变项

y4ekin9u  于 2023-08-01  发布在  Android
关注(0)|答案(1)|浏览(117)

有没有办法在ActivityFragmentRecyclerView的开始添加元素,这些元素在此列表的整个生命周期中都不可用?
举例来说:

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)
    }
}

字符串
我需要将一个元素添加到列表的开头,另一个添加到列表的结尾,以便它们始终保持列表的第一个和最后一个元素,无论添加或删除其他元素多少次。

rjee0c15

rjee0c151#

只需在列表中预先填充“空白”数据,然后在onBindViewHolder中对该项目执行任何您想要的操作,或者使用不可更改的数据在onCreateViewHolder中创建一个单独的ViewHolder
有很多关于“如何使用RecyclerView与几种ViewHolder类型”的教程。此外,我建议使用Jetpack Compose或至少Airbnb的Epoxy。

相关问题