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

如何正确传递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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:12:13