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

如何使用变量动态切换ImageView中的图片?

动态设置图片资源的实现方式

可以实现,但不能直接通过img_xyz这种字符串形式替换img_1——因为R.drawable中的资源是编译时生成的int类型常量,无法直接通过字符串变量引用。下面提供两种可行的实现方法:

方法一:通过资源名称动态获取ID

使用getResources().getIdentifier()方法,根据拼接的资源名称获取对应的资源ID,再设置给ImageView:

// 假设xyz是存储数字的变量,比如1、2、3
int xyz = 1;
String imgResourceName = "img_" + xyz;
// 获取资源ID:参数依次为资源名、资源类型、应用包名
int resourceId = getResources().getIdentifier(imgResourceName, "drawable", getPackageName());

if (resourceId != 0) {
    // 找到对应资源,设置图片
    imageView1.setImageResource(resourceId);
} else {
    // 未找到资源时的兜底逻辑,比如设置默认图
    imageView1.setImageResource(R.drawable.default_image);
}

注意事项:

  • 资源名称必须和drawable目录下的文件名完全一致,且大小写敏感(Android资源文件名通常建议小写)
  • getIdentifier是动态查找,性能略低于直接引用R.drawable.xxx,不适合频繁调用的场景
  • 如果在Fragment中使用,需替换为requireContext().getResources()和requireContext().getPackageName()

方法二:使用资源ID数组映射

如果已知图片数量固定,提前将所有资源ID存入数组,通过变量作为索引获取,这种方式性能更优:

// 预先定义资源ID数组
int[] imageResources = {R.drawable.img_1, R.drawable.img_2, R.drawable.img_3};
int xyz = 1;

// 校验变量范围,避免数组越界
if (xyz >= 1 && xyz <= 3) {
    // 数组索引从0开始,所以xyz需要减1
    imageView1.setImageResource(imageResources[xyz - 1]);
} else {
    // 处理无效的xyz值
    imageView1.setImageResource(R.drawable.default_image);
}

这种方法的优势:编译时就确定资源ID,无动态查找开销,还能避免拼写错误,适合资源数量固定的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:00:56