删除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
相关产品推荐
相关产品推荐

