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

删除drawable文件夹未使用图片致ListView中图片位置错乱

问题排查与解决方向

问题描述

我使用包含ImageView、TextView1、TextView2和CheckBox的ListView,数据来源于ArrayList:

if(arrayList==null) {
            arrayList = new ArrayList<>();

            arrayList.add(new Country(R.drawable.picaed, Txtshort1, txtlong1, false));
            arrayList.add(new Country(R.drawable.picafn, Txtshort2, txtlong2, false));
            arrayList.add(new Country(R.drawable.picall, Txtshort3, txtlong3, false));
            // 更多数据项
}

Adapter中设置内容的代码如下:

image.setImageResource(getItem(position).getImage());

currency.setText(getItem(position).getCurrency());

country.setText(getItem(position).getCountry());

favourites.setChecked(getItem(position).getFavourites());

原本功能正常,但删除drawable文件夹中与当前使用图片无关的未使用图片后,ListView内图片显示位置完全错乱,文本顺序却保持正常,需排查问题根源。

排查与解决方向

  • 检查资源ID的重新分配:Android Studio删除资源后会自动重新生成R.java并分配新的资源ID。如果ArrayList的数据是缓存状态(比如持久化存储后未重新初始化),旧的资源ID会对应错误的图片。解决方式:重新初始化ArrayList,确保使用最新的资源ID填充数据。
  • 修复Adapter的Item复用问题:ListView的Item是复用机制,需检查getView方法是否正确处理ImageView的复用状态。可在设置setImageResource前,先调用image.setImageDrawable(null)或image.setImageResource(android.R.color.transparent),避免复用旧图片残留。
  • 清理编译缓存:删除图片后编译缓存可能未更新,导致资源ID映射错误。执行Build -> Clean Project,再Build -> Rebuild Project,强制重新编译生成最新的资源ID映射。
  • 校验Country类的getImage()方法:确认该方法返回的是正确的资源ID,排查是否在序列化/反序列化(若有持久化ArrayList)或其他逻辑中修改了ID值。
  • 检查多分辨率drawable文件夹:若项目分drawable-hdpi、drawable-xhdpi等多分辨率文件夹,确认删除操作未误删目标图片在对应分辨率文件夹下的副本,保证目标图片在所有需要的分辨率文件夹中完整存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:05:24