将图片从一个活动传递到另一个活动

时间:2014-02-20 07:03:52

标签: android gridview android-activity android-adapter

当我点击网格视图中的一个项目并将其转到另一个活动并在那里查看我的代码时,我有一个网格视图:

gridView.setAdapter(new ImageAdapter(this));
gridView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            // TODO Auto-generated method stub
             Intent i = new Intent(getApplicationContext(), MainActivity.class);
                // passing array index
                i.putExtra("id", position);
                startActivity(i);
        }
});

即将观看的活动

Intent i = getIntent(); 
// Selected image id
int position = i.getExtras().getInt("s");
ImageAdapter imageAdapter = new ImageAdapter(this);
ImageView imageView = (ImageView) findViewById(R.id.imageView1);
imageView.setImageResource(imageAdapter.moodpic[position]);

4 个答案:

答案 0 :(得分:3)

您尝试使用错误的密钥getInt("s")来获取额外的密钥。

试试这个

int position = getIntent().getIntExtra("id",0);

答案 1 :(得分:1)

你应该改变

int position = i.getExtras().getInt("id" , 0);
而不是这个

int position = i.getExtras().getInt("s");

这是因为您已将“id ”作为键,因此每当您检索时,该键必须相同,默认情况下int的值为 0

答案 2 :(得分:0)

首先将图像转换为字节数组然后传入Intent并在下一个活动中从Bundle获取字节数组并转换为图像(位图)并设置为ImageView。

将位图转换为字节数组: -

   Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
//    Bitmap bmp = BitmapFactory.decodeFile(path); You can use this also.
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] byteArray = stream.toByteArray();

将字节数组传递给intent: -

Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);

从Bundle获取字节数组并转换为位图图像: -

Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("picture");

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);
image.setImageBitmap(bmp);

2)首先将图像保存到SDCard中,然后在下一个活动中将此图像设置为ImageView。

3)将Bitmap传递给Intent并从bundle获取下一个活动中的位图,但问题是如果你的Bitmap / Image大小很大,那么下一个活动中的图像就不会加载。

答案 3 :(得分:0)

我强烈推荐一种不同的方法。 如果你真的想要这样做,它可能会花费大量内存而且速度也很慢。如果你有一个旧手机和一个大位图,它可能无法正常工作。您可以将其作为额外内容传递,例如

intent.putExtra("data", bitmap)

Bitmap实现了Parcelable,因此您可以将其添加到额外的位置。同样,一个bundle有putParcelable你希望在活动之间传递它,我会将它存储在一个文件中。这样效率更高,而且工作量更少。您可以使用任何其他应用无法访问的MODE_PRIVATE在数据文件夹中创建私人文件。