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

如何实现点击单个ImageView通过Glide仅加载图片至对应视图

解决点击单个ImageView选图后所有ImageView都显示同一张图的问题

问题现象

代码无报错,但点击任意ImageView选择图片后,三个ImageView都会显示选中的图片。

问题根源

  1. 所有ImageView的点击事件都使用了同一个请求码RESULT_LOAD_IMG,导致onActivityResult无法区分是哪个ImageView发起的图片选择请求。
  2. onActivityResult中没有做请求码判断,只要返回结果成功,就会依次把图片加载到三个ImageView中,这是所有ImageView显示同一张图的直接原因。

解决方案

步骤1:定义唯一请求码

为每个ImageView分配独立的请求码,用于区分不同的图片选择请求:

private static final int RESULT_LOAD_IMG_0 = 100;
private static final int RESULT_LOAD_IMG_1 = 101;
private static final int RESULT_LOAD_IMG_2 = 102;

步骤2:修改点击事件,使用对应请求码

每个ImageView的点击事件使用专属请求码启动图片选择:

mImg.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, RESULT_LOAD_IMG_0);
    }
});

mImg1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, RESULT_LOAD_IMG_1);
    }
});

mImg2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, RESULT_LOAD_IMG_2);
    }
});

步骤3:修改onActivityResult,匹配请求码加载图片

在onActivityResult中通过请求码判断发起请求的ImageView,仅给对应的ImageView加载图片:

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && data != null) {
        final Uri imageUri = data.getData();
        switch (requestCode) {
            case RESULT_LOAD_IMG_0:
                Glide.with(getContext()).load(imageUri).into(mImg);
                break;
            case RESULT_LOAD_IMG_1:
                Glide.with(getContext()).load(imageUri).into(mImg1);
                break;
            case RESULT_LOAD_IMG_2:
                Glide.with(getContext()).load(imageUri).into(mImg2);
                break;
        }
    }
}

可选优化:简化点击事件代码

可以用统一的点击监听减少重复代码:

View.OnClickListener imagePickerListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        int requestCode;
        switch (v.getId()) {
            case R.id.mImg: // 替换为你的ImageView实际ID
                requestCode = RESULT_LOAD_IMG_0;
                break;
            case R.id.mImg1:
                requestCode = RESULT_LOAD_IMG_1;
                break;
            case R.id.mImg2:
                requestCode = RESULT_LOAD_IMG_2;
                break;
            default:
                return;
        }
        startActivityForResult(photoPickerIntent, requestCode);
    }
};

// 给三个ImageView绑定同一个监听
mImg.setOnClickListener(imagePickerListener);
mImg1.setOnClickListener(imagePickerListener);
mImg2.setOnClickListener(imagePickerListener);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:23:32