Kotlin RecyclerView无法展示完整数组元素的问题求助
解决RecyclerView展示所有数组元素的问题
你的代码核心问题是错误地把数据绑定逻辑放在了onCreateViewHolder里,还硬编码固定了索引1,这才导致只能显示单个元素。正确的做法是把数据绑定放到onBindViewHolder,同时用ViewHolder缓存视图引用,优化性能。
修正步骤:
- 重构ViewHolder类:把item布局里的ImageView、TextView等视图引用放到ViewHolder内部,避免每次绑定重复调用
findViewById - 转移数据绑定逻辑:删除
onCreateViewHolder里硬编码取数据和绑定视图的代码,只保留布局加载和ViewHolder创建 - 在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
相关产品推荐
相关产品推荐

