如何将图像数据从一个活动传递到另一个活动?

3

我正在使用两个活动。一个活动在 GridView 中显示图像,通过单击该 GridView 中的特定图像,应在另一个活动中显示全屏图像。

我该如何实现这个目标?

我的 MyGridView.java 文件:

mGridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,long id) {
    // TODO Auto-generated method stub
    Toast.makeText(getApplicationContext(), "Image"+(position+1),Toast.LENGTH_SHORT).show();
    System.out.println(id);
    Intent i = new Intent(this, MyImageViewActivity.class);
    Bundle bundle = new Bundle();
    bundle.putInt("image", position);
    i.putExtras(bundle);
    startActivityForResult(i, 0);
}
});
9个回答

3

传递图片的URL / Uri,而不是传递原始图片数据。


我已经为这些图片创建了一个数组。 - Saurabh
2
如果您能添加一个简短的伪代码示例,那将非常棒。 - Octavian Helm

2

在Intent中传递参数给Activity。如果图像来自文件,请传递路径字符串,否则请传递Bitmap。

startActivity(new Intent(this, YourActivity.class).putExtras(new Bundle().putParcelable("bitmap", Bitmap)))

2

在两个活动之间传递数据:

bytes[] imgs = ... // your image
Intent intent = new Intent(this, YourActivity.class);
intent.putExtra("img", imgs);
startActivity(intent);

然后在你的活动(YourActivity)中:

bytes[] receiver = getIntent().getExtra("imgs");

请参考此链接,它也会对您有所帮助。
在这里,您可以了解如何将位图转换为字节数组


2

在MyGridView中:(someInteger是代表所选图像的索引的整数)

Intent myIntent = new Intent(this, MyImageViewActivity.class);
Bundle bundle = new Bundle();
bundle.putInt("image", someInteger);
myIntent.putExtras(bundle);
startActivityForResult(myIntent, 0);

在MyImageViewActivity中:

Bundle bundle = this.getIntent().getExtras();
int pic = bundle.getInt("image");

当然,您可以将任何内容放入包中!也许是一个字节数组或其他东西。

意图myIntent = new Intent(this, yourOtherActivity.class); 显示错误 "构造函数Intent(new AdapterView.OnItemClickListener(){}, Class<MyImageViewActivity>)未定义"。 - Saurabh
将yourOtherActivity更改为您的第二个活动的类名。 - Sherif elKhatib
这张图片将被setimagresource使用吗? - Saurabh
请使用 putLong 而不是 putInt!getLong 代替 getInt。 - Sherif elKhatib
@Saurabh 让我们在聊天室里继续这个讨论 - Sherif elKhatib
显示剩余3条评论

1

我想你需要使用Intent类。

Intent intent = new Intent(YourSourceActivity.this, TargetActivty.class);
Bundle addinfo = new Bundle();

addinfo.putInt("imageid", someid);

intent.putExtras(addinfo);

谢谢你,还有在目标活动中我们只需要: Bundle bundle = this.getIntent().getExtras(); int pic = bundle.getInt("imageid"); - ashim888

1

Grid View 的一个项目被单击时,获取所单击的项目并通过 PutExtra 将其作为参数传递给下一个 activity。在下一个 activity 中从 extras 中检索图像并将其显示给用户。


0
在Activity中将图像转换为ByteArray,并将其附加到意图中。
intent.putExtra("img",<ByteArray>);

然后启动活动B。

在活动B中

Bitmap bm = BitmapFactory.decodeByteArray(getIntent().getByteArrayExtra("img"), 0, getIntent().getByteArrayExtra("img").length);

这样您就可以在活动之间传递图像。


0

这是我的流程:非常好。 活动1:

ByteArrayOutputStream stream=new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);
    byte[] byteArray=stream.toByteArray();
    Intent intent = new Intent(getApplicationContext(), FrameActivity.class);
    intent.putExtra("Image", byteArray);
    startActivity(intent);

在FrameActivity.class中

collageView = (CollageView) findViewById(R.id.btn_collage);
    byte[] byteArray = getIntent().getByteArrayExtra("Image");
    Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
    collageView.setImageBitmap(bmp);

0
尝试通过intent.putExtra()传递与图像相关的id,并通过启动的活动上的bundle接收它。

我得到的所有ID都是0。我不知道它们是否正确。 - Saurabh

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