如何将点击的图像传递给另一个类

时间:2012-03-07 13:25:18

标签: android android-intent arraylist android-listview imageview

我有一个我目前无法解决的问题,对于你们中的一些人来说这个问题可能很简单,但我真的无法继续下去。 我暂时将数据库中的对象存储在数组列表中,我可以在我的应用程序中将这些对象显示为列表视图。但是,我只需将单击的项目传递给另一个活动。 我试图将其传递如下。

            ListView lv = getListView();

        lv.setOnItemClickListener(new OnItemClickListener(){


      public void onItemClick(AdapterView<?>  parent,          
                View view,int position, long id) {
        // TODO Auto-generated method stub
        Intent in = new Intent(getApplicationContext(),
        Property.class);


        in.putExtra("temp_image", image);       
        in.putExtra("temp_identifier", identif);    
        in.putExtra("temp_bedrooms", bedrooms);     
        in.putExtra("temp_address", address);   
        in.putExtra("temp_propType", propType);
        startActivity(in);

        }});

从其他活动

接收
        identif = getIntent().getExtras().getStringArrayList("temp_identifier");
    bedrooms = getIntent().getExtras().getStringArrayList("temp_bedrooms");
    address = getIntent().getExtras().getStringArrayList("temp_address");
    propType = getIntent().getExtras().getStringArrayList("temp_propType");
    image = getIntent().getExtras().getParcelable("temp_image");

            img = (ImageView) view.findViewById(R.id.image);    
            img.setImageBitmap(BitmapFactory.decodeByteArray(
                image.get(POSITION), 0,    
                                    image.get(POSITION).length));

做到这一点有两个缺点。

1)返回一个数组列表对象(仅文本)

2)我无法传递图像

如何仅显示单击的数组列表项并将其显示在另一个活动中。

编辑版本: 强文

  **Here is how i'm querying the images!** 



          private void getDataAndPopulate() {
    // TODO Auto-generated method stub
    image = new ArrayList<byte[]>();
    identif = new ArrayList<String>();
    price= new ArrayList<String>();
    bedrooms= new ArrayList<String>();
    address= new ArrayList<String>();
    propType= new ArrayList<String>();

    Cursor cursor = getEvents(" gall,properties where  properties._id = 
        gall._id " );
    //Select* from gall,properties where properties.propertyId = gall.GallId
    while (cursor.moveToNext()) {
        String temp_id = cursor.getString(0);
        byte[] temp_image = cursor.getBlob(2);
        String temp_identifier = cursor.getString(1);
        String temp_price = cursor.getString(3);
        String temp_bedrooms = cursor.getString(4);
        String temp_address = cursor.getString(5);
        String temp_propType = cursor.getString(6);


        image.add(temp_image);
        identif.add(temp_identifier);
        price.add(temp_price);
        bedrooms.add(temp_bedrooms);
        address.add(temp_address);
        propType.add(temp_propType);


           } 

并且getDataAndPopulate()是

            private Cursor getEvents(String table) {
    SQLiteDatabase db = (placeData).getReadableDatabase();
    Cursor cursor = db.query(table, null, null, null, null, null, null);    
    return cursor;

}

在这里,我将它们作为适配器。

     String[] identifierArray = (String[]) identif.toArray(new String[identif
                                                                    .size()]);
     ItemsAdapter itemsAdapter = new ItemsAdapter(Result.this,
   R.layout.item, identifierArray);
   setListAdapter(itemsAdapter);

提前致谢

5 个答案:

答案 0 :(得分:1)

捆绑包有一个非常小的限制,这就是为什么你得到这个失败的活页夹事务,你试图传递太多的位图超过捆绑的最大大小。由于您是从数据库中获取此信息,为什么不传递图像的主键并从下一个活动中再次从数据库中检索图像?

答案 1 :(得分:0)

Bitmap是Parcelable,因此您可以将它们作为附加内容发送。要从drawable获取位图,请使用以下代码:

if(myImage instanceof BitmapDrawable) { // myImage is a Drawable
    BitmapDrawable bitmapDrawable = (BitmapDrawable) myImage;
    Bitmap bedroomBitmap = bitmapDrawable.getBitmap();

    Intent intent = new Intent();
    intent.putExtra("bedroom", bedroomBitmap);

    ...
}

要转换你的byte [],请使用:

Bitmap bedroomBitmap = BitmapFactory.decodeByteArray(bedroomBytes, 0, bedroomBytes.length);
intent.putExtra("bedroom", bedroomBitmap);

答案 2 :(得分:0)

使用BitmapFactory获取图像的位图,然后使用intent.putExtra()并放置该位图。在下一个活动中,使用getIntent()。getParcelableExtra()获取该位图,然后使用image.setImageBitmap()将此位图设置为图像。

答案 3 :(得分:0)

将图像转换为base64字符串通过intent发送,然后再将字符串转换为位图文件,这样做就可以了,它对我有用

例如

 Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
yourSelectedImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
encode = Base64.encodeBytes(byteArray);
byte[] decode = Base64.decode(encode);
Bitmap bmp = BitmapFactory.decodeByteArray(decode, 0,decode.length);
imgview_photo.setImageBitmap(bmp);

答案 4 :(得分:0)

通过意图您可以传递可序列化对象。

图像/可绘制类不可序列化。所以你不能直接通过Intent传递它们。

我认为此链接有更好的解决方案:

how-do-you-pass-images-bitmaps-between-android-activities-using-bundles