【问题标题】:Add additional data to RecyclerView items向 RecyclerView 项目添加附加数据
【发布时间】:2020-12-14 03:39:15
【问题描述】:

我有一个功能正常的 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 是否甚至能够做到这一点。我能看到的唯一方法是将两个数据类(Ingredient 加上新的)合并在一起,并将它们作为列表一起提交给适配器,但这似乎很混乱,我正在寻找更好的方法。

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

提前致谢!

【问题讨论】:

  • 当你说要添加额外的数据时,你指的是什么类型的数据?可以用 View.tag 添加吗?
  • 感谢您的贡献!我要添加的数据与已经属于适配器的数据类似。它是存储在房间数据库中的数据,我通常通过视图模型访问。我对 setTag 了解不多(我可以从布局文件中检索标签吗?)但我想到的是通过在我的 Viewholder 上调用 holder.binding.mTextField = myData 来在 onBindViewHolder() 中添加数据。我只是不知道这是否是正确的方法。

标签: android kotlin android-recyclerview


【解决方案1】:

好的,我找到了一个解决方案:我提交了附加数据列表,就像另一个一样,但没有将其直接附加到 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
            }
        }
    }

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

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 2021-06-14
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多