如何使用listview项将图像从一个活动发送到另一个活动

时间:2012-09-25 10:40:38

标签: android android-intent android-emulator android-listview android-activity

将图像从一个活动发送到另一个活动但是能够将文本发送到另一个活动的问题,放置一些带有文件名的源代码请查看并更正错误,如果可能的话请写下所需的代码因为我遇到了这个问题最近两天,我已经在stackoverflow中提交了这个问题3次,但我没有得到很好的答案,请有人写下我需要做的正确的事情,并为我编写所需的代码,但在这里我放置了一些我的代码:

MainActivity Code:

 list.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
             // getting values from selected ListItem
                String title = ((TextView) view.findViewById
          (R.id.title)).getText().toString();
                String artist = ((TextView) view.findViewById
          (R.id.artist)).getText().toString();
                String duration = ((TextView) view.findViewById
          (R.id.duration)).getText().toString();
                byte[] image = null;
                Bitmap thumb_url = BitmapFactory.decodeByteArray
          (image, 0, image.length);


            //  Bitmap bMap = BitmapFactory.decodeByteArray
          (array, 0, array.length);

                // Starting new intent
                Intent in = new Intent
          (getApplicationContext(),    SingleMenuItemActivity.class);
                in.putExtra(KEY_TITLE, title);
                in.putExtra(KEY_ARTIST, artist);
                in.putExtra(KEY_DURATION, duration);
                in.putExtra(KEY_THUMB_URL, thumb_url);
                startActivity(in);

            }
        });     
    }   
    }

ReceivingActivity Code:

public class SingleMenuItemActivity  extends Activity {

// XML node keys
private static final String KEY_TITLE = "title";
private static final String KEY_ARTIST = "artist";
private static final String KEY_DURATION = "duration";
private static final String KEY_THUMB_URL = "thumb_url";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.single_list_item);

    // getting intent data
    Intent in = getIntent();

    // Get XML values from previous intent
    String title = in.getStringExtra(KEY_TITLE);
    String artist = in.getStringExtra(KEY_ARTIST);
    String duration = in.getStringExtra(KEY_DURATION);

    ImageView image = (ImageView)findViewById(R.id.thumb_url);
    Object thumb_url = null;
    View bitmap = null;
    bitmap.setBackgroundResource((Integer) thumb_url);   
    // Displaying all values on the screen
    TextView lblName = (TextView) findViewById(R.id.name_label);
    TextView lblCost = (TextView) findViewById(R.id.email_label);
    TextView lblDesc = (TextView) findViewById(R.id.mobile_label);

   //what code to write for image here 

    lblName.setText(title);
    lblCost.setText(artist);
    lblDesc.setText(duration);

}
 }

XML文件代码:          

    <ImageView     
        android:id="@+id/thumb_url"   
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:src="@drawable/rihanna"/>


   <TextView android:id="@+id/name_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="25dip"
        android:textStyle="bold"
        android:paddingTop="10dip"
        android:paddingBottom="10dip"
        android:textColor="#43bd00"/>

      <TextView android:id="@+id/email_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#acacac"/>

    <TextView android:id="@+id/mobile_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"/>
 </LinearLayout>

3 个答案:

答案 0 :(得分:1)

我可能会弄错,但我认为你试图通过意图传递的对象的大小有限(绑定器事务错误?)。

最好的变体是将此图像存储在某处(内存或磁盘缓存),并仅将图像链接传递给您的活动,因此它将从缓存中检索图像。即使第二个活动重新启动时,您也可以轻松地将链接保存在某处(onSaveInstanceState),而无需使用原始位图。

答案 1 :(得分:0)

试试这个

1

  

使用Intent in = new Intent(your activity.this,SingleMenuItemActivity.class);

而不是

  

Intent in = new Intent(getApplicationContext(),SingleMenuItemActivity.class);

2

Intent in = getIntent();

    // Get XML values from previous intent
    String title = in.getStringExtra(KEY_TITLE);
    String artist = in.getStringExtra(KEY_ARTIST);
    String duration = in.getStringExtra(KEY_DURATION);
    Bitmap bitmap =(Bitmap) in.getParcelableExtra(KEY_THUMB_URL);

    ImageView image = (ImageView)findViewById(R.id.thumb_url);


    // Displaying all values on the screen
    TextView lblName = (TextView) findViewById(R.id.name_label);
    TextView lblCost = (TextView) findViewById(R.id.email_label);
    TextView lblDesc = (TextView) findViewById(R.id.mobile_label);

    image.setImageBitmap(bitmap); 

    lblName.setText(title);
    lblCost.setText(artist);
    lblDesc.setText(duration);

}

答案 2 :(得分:0)

Bitmap实现了Parcelable,因此你总是可以在intent中传递它:

Intent in = new Intent
      (getApplicationContext(),    SingleMenuItemActivity.class);
            in.putExtra(KEY_TITLE, title);
            in.putExtra(KEY_ARTIST, artist);
            in.putExtra(KEY_DURATION, duration);
            in.putExtra(KEY_THUMB_URL, thumb_url);
            startActivity(in);

并在另一端检索它:

Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
image.setImageBitmap(bitmap);