android - 向 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 在我的情况下是错误的选择吗?
提前致谢!
解决方案
好的,我找到了一个解决方案:我提交了与另一个数据列表一样的附加数据列表,但没有将其直接附加到 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
}
}
}
由于我添加的数据完全取决于正在显示的现有项目,因此我没有对函数areItemsTheSame
和areContentsTheSame
我的覆盖DiffUtil.ItemCallback
类进行任何更改。
推荐阅读
- vb.net - 找不到并发问题的原因
- android - 从 Android Room 数据库中的 runInTransaction() 返回值
- css - 有没有办法在 CSS 中强制降低特异性?
- angular - Angular 中浏览器显示和 Google Analytics 的动态页面标题
- javascript - JS 日期不是以前导 0 开头 - 可能重复的问题
- firebase - 我应该在哪里安装 firebase admin SDK?
- anti-cheat - 防止安卓游戏作弊
- android - 将图像和文本分享到 Twitter 源
- play-billing-library - 在 Android 上的应用购买库中使用 Alternative
- visual-studio-code - 为 VS Code 创建片段 README.md 文件