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

RecyclerView的onBindViewHolder中如何正确使用setImageResource设置图片

问题根因

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

setImageResource不生效问题截图

修复方案

按以下步骤修改即可:

  • 删除文件头部错误的导入语句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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:39:50