如何正确传递Bitmap列表至另一Activity的GridView并显示?
解决Intent数据接收失败及GridView显示图片问题
一、正确接收传递的图片数据
你的核心问题是错误创建了新的Intent实例,而没有获取启动当前Activity的原始Intent。在EditedImagesActivity的onCreate方法中,必须通过getIntent()获取启动该页面的Intent,才能拿到MainActivity传递的数据:
// EditedImagesActivity的onCreate方法内 ArrayList<Bitmap> receivedImages; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edited_images); // 关键:获取启动当前页面的Intent,而非新建Intent Intent intent = getIntent(); if (intent != null && intent.hasExtra("edited_images")) { // 注意这里的key要和MainActivity中put时完全一致 receivedImages = intent.getParcelableArrayListExtra("edited_images"); } else { Log.e("EditedImagesActivity", "The edited images were not found"); // 无数据时可选择关闭页面或显示空状态 finish(); return; } }
二、实现GridView的图片适配器
Bitmap无法直接用系统默认适配器显示,需要自定义BaseAdapter来处理图片加载:
public class ImageGridAdapter extends BaseAdapter { private Context mContext; private ArrayList<Bitmap> mImageList; public ImageGridAdapter(Context context, ArrayList<Bitmap> imageList) { mContext = context; mImageList = imageList; } @Override public int getCount() { return mImageList.size(); } @Override public Object getItem(int position) { return mImageList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; // 复用View提升性能 if (convertView == null) { imageView = new ImageView(mContext); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); // 固定GridView子项尺寸,可根据需求调整 imageView.setLayoutParams(new GridView.LayoutParams(280, 280)); } else { imageView = (ImageView) convertView; } imageView.setImageBitmap(mImageList.get(position)); return imageView; } }
三、绑定适配器到GridView
回到EditedImagesActivity的onCreate方法,完成GridView的初始化和适配器绑定:
// 获取GridView实例(对应布局中的id) GridView gridView = findViewById(R.id.grid_view_edited); // 创建适配器并绑定 ImageGridAdapter adapter = new ImageGridAdapter(this, receivedImages); gridView.setAdapter(adapter);
补充注意事项
- 确保MainActivity中传递数据的key(如示例中的
edited_images)和接收时完全一致,大小写敏感 - 如果处理后的图片数量多、尺寸大,Intent传递Bitmap可能触发数据大小限制,建议改为存储图片到本地,传递文件路径列表,避免ANR或崩溃
- 确认
EditedImagesActivity已在AndroidManifest.xml中正确注册
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

