ImageView点击切换图片失效:点击后图片消失问题求助
解决ImageView点击后图片消失的问题
看起来你遇到的问题是ImageView点击后图片消失,其实本质是没有正确加载到目标图片,我帮你梳理几个关键问题点,一步步修复:
1. 给ImageView添加android:tag属性
你的XML代码里的ImageView没有设置android:tag,但你在Java代码里通过v.getTag()来获取数组索引a——这会导致解析失败,拿到错误的图片名称,最终加载不到资源。
修改你的ImageView XML,加上对应字符串数组索引的tag(比如你想加载kartu数组里第1个元素,就填0):
<ImageView android:id="@+id/img_11" android:layout_width="50dp" android:layout_height="wrap_content" android:layout_marginRight="5dp" android:layout_weight="1" android:onClick="kartu_klik" android:tag="0" <!-- 这里填写对应数组的索引值 --> app:srcCompat="@drawable/back" />
2. 修正getIdentifier的包名参数
你代码里写的"package.name"是占位符,必须替换成你应用的实际包名(比如com.yourname.cardgame)。如果包名错误,getIdentifier会返回0,调用setImageResource(0)就会让ImageView显示空白。
更稳妥的方式是用getPackageName()动态获取包名,避免硬编码错误:
int image = getResources().getIdentifier(image_name, "drawable", getPackageName());
3. 检查字符串数组kartu的内容
确保kartu数组里的每个图片名称和drawable文件夹里的图片文件名完全一致——特别注意大小写敏感!比如drawable里是club.png,数组里就不能写成Club或者club_card,否则会找不到资源。
4. 优化代码并增加日志辅助排查
可以在Java代码里加一些日志,帮你确认每一步的参数是否正确,同时优化代码逻辑:
import android.util.Log; public void kartu_klik(View v) { // 打印当前View的tag值,确认是否正确 Log.d("CardClick", "View Tag: " + v.getTag()); int a = Integer.parseInt((String) v.getTag()); String image_name = kartu[a]; Log.d("CardClick", "Target Image Name: " + image_name); int imageResId = getResources().getIdentifier(image_name, "drawable", getPackageName()); // 如果返回0,说明找不到对应资源 Log.d("CardClick", "Image Resource ID: " + imageResId); if (imageResId == 0) { Log.e("CardClick", "ERROR: Could not find image with name: " + image_name); return; } ImageView img = (ImageView) v; // 直接用v强转,不用findViewById更高效 img.setImageResource(imageResId); }
按照这几步调整后,应该就能正常切换图片了。
内容的提问来源于stack exchange,提问作者Reinhard Armstrong
相关产品推荐
相关产品推荐

