获取 ImageView 的图片并通过 Intent 将其发送到另一个活动

4

我的应用程序中有一个产品网格。当用户选择网格中的某个项目时,我会启动一个新的对话框活动,并显示该项目的名称、数量和图片。但是我无法动态地发送图像源。

这是我的代码:

gridView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,int position, long id) {
            //Toast.makeText(getApplicationContext(),((TextView) v.findViewById(R.id.grid_item_label)).getText(), Toast.LENGTH_SHORT).show();
            Intent item_intent = new Intent(MainActivity.this, Item.class);
            item_intent.putExtra("name",((TextView) v.findViewById(R.id.grid_item_label)).getText());
            item_intent.putExtra("quantity",((TextView) v.findViewById(R.id.grid_item_quantity)).getText());

            //my problem is here***************************************************
            ImageView my_image =  findViewById(R.id.grid_item_image).getDrawable();
            item_intent.putExtra("image",my_image.getXXXXX());
            //*********************************************************************
            MainActivity.this.startActivity(item_intent);

        }
    });

我该使用什么方法从ImageView中获取图片源代码?


两次调用getDrawable()没有意义,但这并不能解决你的问题。 - bofredo
6个回答

35

像这样使用Bundle:

imageView.buildDrawingCache();
Bitmap image= imageView.getDrawingCache();

 Bundle extras = new Bundle();
extras.putParcelable("imagebitmap", image);
intent.putExtras(extras);
startActivity(intent);


Bundle extras = getIntent().getExtras();
Bitmap bmp = (Bitmap) extras.getParcelable("imagebitmap");

image.setImageBitmap(bmp );

1
记住,在编程中你需要传递大量的数据。你也可以传递引用 ID。 - Bram
A+答案。非常感谢。 :) - Rohit Kumar

2
您可以将Parcable(例如位图)或可序列化对象放入Bundle中,并从其他活动中的Bundle检索对象。
尽管我不建议这样做,因为您在活动之间传递了大量数据。我建议您将图像引用ID传递到下一个活动中,并在那里检索图像。
编辑:
intent.putExtra("imageId", imageId);

在另一个活动中:
int imageRef = getIntent().getIntExtra("imageId", defaultValue);

http://developer.android.com/reference/android/content/Intent.html#getIntExtra%28java.lang.String,%20int%29


2

首先您需要保存您的图像,然后可以使用此方法发送已保存图像的文件名。

    void Send() { 
            if (file != null) {
            Intent intent = new Intent(this, Draw.class);
            intent.putExtra(PICTURE_FILE_ID, file);
            startActivity(intent);
        } else if (file == null) {
            Toast tst = Toast.makeText(getApplication(),
                    "Please Click Save First", Toast.LENGTH_SHORT);
            tst.setGravity(Gravity.CENTER, 0, 0);
            tst.show();
        }
}

另一个活动

使用mBitmapFile = (File) getIntent().getSerializableExtra(YourClassName.PICTURE_FILE_ID);


2

您需要使用解决方案将drawable转换为Bitmap: 然后,您可以通过意图将其传递到下一个活动,因为Bitmap类实现了Parcelable接口。


1

当在活动之间传递位图数据时,我通常更喜欢将其存储在扩展的Application类中,在所有活动中都可以访问它。你可以像其他人所说的那样通过Intent传递它,但如果你需要在多个活动中使用它,将其存储在应用程序中会给你更多的灵活性。


0
我曾遇到同样的问题,并且通过通过intent将所选项目的位置传递解决了它。根据我从Stack中的专业人士阅读和理解,这是最好的解决方案。 只需在包含GridView的FirstActivity.java中执行此操作。
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    Intent intent = new Intent(getActivity(),DetailActivity.class);
    intent.putExtra("id",position);
     startActivity(intent);    } });

然后在您的目标Activity中,您必须从extras获取位置,并从数据库或图像数组转换的位置提取它:

Intent intent = getActivity().getIntent();
            int position = intent.getIntExtra("id",0);
            ImageAdapter imageAdapter = new ImageAdapter(getActivity());
            ImageView imageView = (ImageView)rootView.findViewById(R.id.movie_detail_image);
            imageView.setImageResource((int)imageAdapter.getItem(position));

你必须编辑你的图片适配器(image adapter)中的getItem方法,以返回所选图片的ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接