You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin RecyclerView无法展示完整数组元素的问题求助

解决RecyclerView展示所有数组元素的问题

你的代码核心问题是错误地把数据绑定逻辑放在了onCreateViewHolder里,还硬编码固定了索引1,这才导致只能显示单个元素。正确的做法是把数据绑定放到onBindViewHolder,同时用ViewHolder缓存视图引用,优化性能。

修正步骤:

  1. 重构ViewHolder类:把item布局里的ImageView、TextView等视图引用放到ViewHolder内部,避免每次绑定重复调用findViewById
  2. 转移数据绑定逻辑:删除onCreateViewHolder里硬编码取数据和绑定视图的代码,只保留布局加载和ViewHolder创建
  3. 在onBindViewHolder中绑定对应position的数据:根据当前position取出数组里的对应元素,赋值给ViewHolder里的视图

修正后的完整代码:

class CategoryRecyclerViewAdapter(var arrayList: ArrayList<CategorySpinnerModel>) :
    RecyclerView.Adapter<CategoryRecyclerViewAdapter.ViewHolder>() {

    // 仅负责加载布局、创建ViewHolder,不处理数据绑定
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.category_spinner_item, parent, false)
        return ViewHolder(v)
    }

    // 给对应position的item绑定数据
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val currentItem = arrayList[position]
        holder.categoryIco.setImageResource(currentItem.ico)
        holder.categoryText.text = currentItem.text
        holder.dropdownIco.setImageResource(currentItem.dropIco)
    }

    override fun getItemCount(): Int {
        return arrayList.size
    }

    // ViewHolder缓存视图引用,提升RecyclerView复用性能
    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val categoryIco: ImageView = itemView.findViewById(R.id.category_ico)
        val categoryText: TextView = itemView.findViewById(R.id.category_text)
        val dropdownIco: ImageView = itemView.findViewById(R.id.category_dropdowm)
    }
}

额外优化建议:

  • 类名改成符合Kotlin规范的大驼峰命名(比如CategoryRecyclerViewAdapter、CategorySpinnerModel)
  • 把CategorySpinnerModel里的getIco()、getTextt()改成Kotlin属性形式(比如val ico: Int、val text: String),代码更简洁

内容的提问来源于stack exchange,提问作者Gowshik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:50:28