RecyclerView 中的不可变项

问题描述 投票:0回答:1

是否可以在

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

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

android xml android-recyclerview
1个回答
0
投票

只需用“空白”数据预填充您的列表,然后在

onBindViewHolder
中对该项目执行任何您想要的操作,或者在
ViewHolder
中使用不可更改的数据创建单独的
onCreateViewHolder

有大量关于“如何将 RecyclerView 与多种 ViewHolder 类型一起使用”的教程。另外,我建议使用 Jetpack Compose 或至少使用 Airbnb 的 Epoxy。

© www.soinside.com 2019 - 2024. All rights reserved.