首页 > 解决方案 > 向 RecyclerView 项目添加附加数据

问题描述

我有一个功能正常的 RecyclerView,它可以很好地处理我通过 ListAdapter 提供的给定数据,如下所示。我现在想要的是向我的列表项添加额外的数据。

class IngredientAdapter(
    private val ingredientClickListener: IngredientClickListener
) : ListAdapter<Ingredient, RecyclerView.ViewHolder>(EventDiffCallback()) {

    private val adapterScope = CoroutineScope(Dispatchers.Default)

    fun submitIngredientsList(list: List<Ingredient>?) {
        adapterScope.launch {
            withContext(Dispatchers.Main) {
                submitList(list)
            }
        }
    }

我不知道如何正确地做到这一点,或者 RecyclerViews 是否甚至能够做到这一点。我能看到的唯一方法是将两个数据类(成分加上新的)合并在一起,并将它们作为列表一起提交给适配器,但这看起来很混乱,我正在寻找更好的方法。

所以我的问题是:如何在不将数据与我已有的数据合并的情况下将数据输入我的列表项?RecyclerView 在我的情况下是错误的选择吗?

提前致谢!

标签: androidkotlinandroid-recyclerview

解决方案


好的,我找到了一个解决方案:我提交了与另一个数据列表一样的附加数据列表,但没有将其直接附加到 ListAdapter,因为这是不可能的。

在获取当前位置的项目后的函数onBindViewHolder中,我使用此信息从新数据列表中检索正确的元素。然后我通过使用 viewholders 视图绑定调用将数据附加到视图

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        when (holder) {
            is ViewHolder -> {
                val resources = holder.itemView.context.resources
                val ingredientItem = getItem(position)
                holder.bind(ingredientClickListener, ingredientItem)
                val groceryInStock: GroceryInStock? = availableGroceries.firstOrNull{ 

                    ingredientItem.grocery.groceryId == it.grocery.groceryId 
                }

                holder.binding.listItemAvailableAmount.text = groceryInStock.amount
            }
        }
    }

由于我添加的数据完全取决于正在显示的现有项目,因此我没有对函数areItemsTheSameareContentsTheSame我的覆盖DiffUtil.ItemCallback类进行任何更改。


推荐阅读