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

如何在RecyclerView中点击指定位置图片时切换为新图片?

问题描述

我有一个基于图片ArrayList的RecyclerView,目前可以正常运行,效果如下:
RecyclerView展示效果
现在我希望点击任意图片时,在RecyclerView适配器实现的itemClicked方法中将该图片切换为目标图片,相关代码如下:

public List<Information> getData(){ 
    List<Information> data = new ArrayList<>(); 
    int[] iconList = {R.drawable.th_ok,R.drawable.thbg_small,R.drawable.thbg_small,R.drawable.thbg_small,R.drawable.thbg_small,R.drawable.thbg_small,R.drawable.thbg_small,R.drawable.thbg_small,R.drawable.thbg_small,R.drawable.thbg_small,R.drawable.thbg_small}; 
    String[] titles = {"1","2","3","4","5","6","7","8","9","10"}; 
    String[] subtitles = {"A","B","C","D","E","F","G","H","I","J" }; 
    for(int i=0;i<titles.length && i<iconList.length;i++) { 
        Information current = new Information(); 
        current.iconth = iconList[i]; 
        current.subtitle = subtitles[i]; 
        data.add(current); 
    } 
    return data; 
} 

@Override 
public void itemClicked(View view, int position) { 
    Resources res = getResources(); 
    Drawable newimages = res.getDrawable(R.drawable.th_ok); 
    // startActivity(new Intent(treasure.this,MapsActivity.class)); 
} 
解决方案

嘿,这个需求其实很好实现,咱们一步步来搞定它:

核心思路

RecyclerView是基于数据源来渲染item的,直接设置Drawable不会持久化(滑动后会因为item复用丢失状态),正确的做法是修改对应位置的数据源,再通知适配器刷新该item。

具体步骤

  1. 修改对应位置的数据源
    首先你需要确保持有全局可访问的数据源列表(比如在Activity/Fragment里定义List<Information> mDataList,并在初始化时赋值为getData()的返回值),然后在itemClicked方法中修改对应position的图片资源ID:
// 修改数据源中对应位置的图片资源ID
mDataList.get(position).iconth = R.drawable.th_ok;
  1. 通知适配器刷新单个item
    改完数据源后,调用适配器的notifyItemChanged()方法,只刷新点击的那个item(比全量刷新更高效):
// 假设mAdapter是你初始化的RecyclerView适配器实例
mAdapter.notifyItemChanged(position);

修改后的完整itemClicked方法示例

// 确保mDataList和mAdapter是全局可访问的变量
@Override 
public void itemClicked(View view, int position) { 
    // 修改数据源中对应位置的图片ID
    mDataList.get(position).iconth = R.drawable.th_ok;
    // 通知适配器刷新该item
    mAdapter.notifyItemChanged(position);
}

额外注意点

  • 要保证你的Information类的iconth字段不是final修饰的,否则无法修改它的值;
  • 不要直接用newimages这个Drawable对象去设置图片,因为RecyclerView的item复用机制会导致状态丢失,必须通过修改数据源来实现持久化的状态变更。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:52:16