【问题标题】:RecyclerView adapter `onCreateViewHolder` & `onBindViewHolder` invoked only onceRecyclerView 适配器 `onCreateViewHolder` 和 `onBindViewHolder` 仅调用一次
【发布时间】:2019-11-13 17:54:48
【问题描述】:

我有一个像这样的 RecyclerView.Adapter

internal class MyAdapter : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
  private val data: List<MyModel> = SeedData().seed()

  override fun onCreateViewHolder(v: ViewGroup, viewType: Int): MyViewHolder {
    val binding = MyListitemBinding.inflate(LayoutInflater.from(v.context), v, false)
    return MyViewHolder(binding)
  }

  override fun getItemCount() = data.size

  override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    holder.bind(data[position])
  }
}

但是,只有 data 中的第一项被显示(即 onCreateViewHolderonBindViewHolder 仅调用一次)。如何让它正确显示数据中的所有项目?

【问题讨论】:

  • 所以data.size 没有返回1,它返回的数字不止一个——对吗?
  • 您的 RecyclerView 高度可能太小了。
  • @ReazMurshed 正确,数据有多个项目。
  • 或者您的项目布局高度可能是 match_parent
  • 是的,@moumenShobakey 是对的。如果您尝试滚动,则可以看到它再次调用onBindViewHolder

标签: android android-recyclerview android-viewholder


【解决方案1】:

上面评论的答案是正确的。我的列表项(视图)是屏幕的全高:

这意味着 RecyclerView 只会在您滚动到下一个元素时更新 ViewHolder。解决方法是修改这些项目的高度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 2017-03-05
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多