RecyclerView的onBindViewHolder中如何正确使用setImageResource设置图片
问题根因
你的setImageResource调用不生效是因为导错了R类:文件头部导入的是Android系统自带的android.R,而非你项目自身的com.example.revenuer.R。系统R类中不存在你自定义的custom_arrow_up图片资源,因此设置图片的逻辑无法正常执行。

修复方案
按以下步骤修改即可:
- 删除文件头部错误的导入语句
import android.R - 正确导入你项目自身的R类
com.example.revenuer.R - 补全
onBindViewHolder中的分支逻辑:你当前仅处理了operation.type == true时的图片设置,没有处理false分支,RecyclerView的复用机制会导致列表滑动时图片错乱,必须给两种状态都设置对应图片 - 所有资源引用统一使用项目自身的R类,不要和系统R类混用
修复后的完整适配器代码如下:
package com.example.revenuer.adapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.example.revenuer.R import com.example.revenuer.entity.Operation import com.example.revenuer.listener.OperationListener class HistoryAdapter(val list: List<Operation>): RecyclerView.Adapter<HistoryAdapter.OperationViewHolder>() { private var listener: OperationListener? = null fun setOnOperationListener(listener: OperationListener){ this.listener = listener } class OperationViewHolder(view: View, private val listener: OperationListener?): RecyclerView.ViewHolder(view){ val nameView: TextView = view.findViewById(R.id.item_cardview_name) val valueView: TextView = view.findViewById(R.id.item_cardview_value) val dateView: TextView = view.findViewById(R.id.item_cardview_date) val imageView: ImageView = view.findViewById(R.id.operation_image) init { view.setOnClickListener{ listener?.onListItemClick(view, adapterPosition) } } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OperationViewHolder{ val view = LayoutInflater.from(parent.context).inflate(R.layout.operation_item, parent,false) return OperationViewHolder(view, listener) } override fun onBindViewHolder(holder: OperationViewHolder, position: Int) { val operation = list[position] holder.nameView.text = operation.name holder.valueView.text = operation.value holder.dateView.text = operation.date if (operation.type) { holder.imageView.setImageResource(R.drawable.custom_arrow_up) } else { // 替换为你自己的对应类型图标资源 holder.imageView.setImageResource(R.drawable.custom_arrow_down) } } override fun getItemCount(): Int = list.size }
校验点
修改完成后如果仍不生效,检查以下两点:
- 确认
custom_arrow_up图片文件确实存放在项目的res/drawable系列目录下,文件名无大写、特殊字符 - 同步项目后清理缓存重新运行(Android Studio中可执行
Build -> Clean Project后再Rebuild Project)
内容的提问来源于stack exchange,提问作者szaire
相关产品推荐
相关产品推荐

