如何接收通过putExtra在两个Activity间传递的ImageView?
解决Activity间传递ImageView的问题
嘿,其实直接传递ImageView对象是行不通的哦!因为ImageView属于View的子类,它和当前Activity的上下文、窗口是绑定在一起的,而且View并没有实现Parcelable或者Serializable接口,没法通过Intent的putExtra来序列化传递。
你代码里已经拿到了图片的URL(image_data),这才是应该传递的核心数据!下面是具体的修改步骤:
1. 修改发送端(RecyclerViewAdapter的点击事件)
把传递ImageView的逻辑改成传递图片URL:
holder.mView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(v.getContext(), 你的目标Activity.class); // 把图片URL放到Intent里,用一个自定义的key标记 intent.putExtra("KEY_IMAGE_URL", image_data); v.getContext().startActivity(intent); } });
2. 在目标Activity中接收并加载图片
在目标Activity的onCreate方法里,取出URL,再用图片加载库(比如Glide,这是Android开发中常用的图片加载工具)把图片加载到新的ImageView中:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.你的目标Activity布局); // 获取布局里的ImageView ImageView targetImageView = findViewById(R.id.你的ImageView控件ID); // 从Intent中取出传递过来的URL String imageUrl = getIntent().getStringExtra("KEY_IMAGE_URL"); // 确保URL不为空,然后用Glide加载图片 if (imageUrl != null && !imageUrl.isEmpty()) { Glide.with(this) .load(imageUrl) .placeholder(R.drawable.占位图资源ID) // 可选:加载时显示的占位图 .error(R.drawable.加载失败图资源ID) // 可选:加载失败时显示的图 .into(targetImageView); } }
补充:如果不用Glide,原生方式加载(不推荐,容易出OOM)
要是你暂时不想用第三方库,也可以用原生代码加载,但记得要在子线程里执行网络请求,然后切回主线程更新UI:
new Thread(() -> { try { URL url = new URL(imageUrl); Bitmap bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream()); // 切回主线程设置图片 runOnUiThread(() -> targetImageView.setImageBitmap(bitmap)); } catch (IOException e) { e.printStackTrace(); } }).start();
为什么不能直接传ImageView?
简单说两点:
- View是和当前Activity的窗口绑定的,脱离原上下文后在新Activity里无法正常渲染
- Intent传递的对象必须实现
Parcelable或Serializable接口,View并没有实现这些,所以没法被序列化传递
内容的提问来源于stack exchange,提问作者Dor Furman
相关产品推荐
相关产品推荐

