【问题标题】:send image from one activity to another using listview item in android使用android中的listview项将图像从一个活动发送到另一个活动
【发布时间】:2012-10-06 05:59:40
【问题描述】:

我正在从 URL 获取数据到 listview 中,我希望每当用户单击 listview 项目时,所选项目的详细信息将与图像一起显示给用户,我要将文本数据发送到另一个活动但无法发送图像,但是在单项活动中,我在 imageview 中得到空白而不是图像,我该如何解决这个问题。一些代码供参考:-

     ListViewActivity Code:-   

    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();
String image = ((ImageView)view.findViewById(R.id.list_image))
    .getImageMatrix().toString();

// 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, image);
startActivity(in);

     SingleItemActivity Code:-
    // 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);
    Bitmap bitmap =(Bitmap) in.getParcelableExtra(KEY_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);     
    ImageView image = (ImageView)findViewById(R.id.image_label);
    image.setImageBitmap(bitmap);   


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

     SingleItemXML Code:-
     <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="match_parent">

    <ImageView     
        android:id="@+id/image_label"   
        android:layout_width="50dp"
        android:layout_height="50dp"
        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>

【问题讨论】:

    标签: android android-intent android-emulator


    【解决方案1】:

    您应该使用buildDrawingCache()getDrawingCache() 从 ImageView 中获取 Bitmap, 所以在你的onItemClick() 中做,

    imageView.buildDrawingCache();
    Bitmap bitmap = imageView.getDrawingCache();
    
    Intent intent = new Intent(context, next_activity.this);
    intent.putExtra("image", bitmap);
    startActivity(intent);
    

    为了,在下一个Activity中检索,

    bitmap = getIntent().getParcelableExtra("image");
    

    【讨论】:

      【解决方案2】:

      in.putExtra(KEY_THUMB_URL, image);

      将图像转换为 BASE64 字符串格式。并在新活动中再次将 BASE64 字符串转换为图像..

      public String bitMapToString(Bitmap bitmap) {
              ByteArrayOutputStream baos = new ByteArrayOutputStream();
              bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
              byte[] b = baos.toByteArray();
              String stringBody = null;
              try {
                  stringBody = Base64.encodeToString(b, Base64.DEFAULT).toString();
              } catch (Exception e) {
                  toast(e.toString());
                  e.printStackTrace();
              }
              return stringBody;
          }
      

      【讨论】:

        猜你喜欢
        • 2015-07-20
        • 1970-01-01
        • 2019-07-31
        • 2016-11-04
        • 2012-07-20
        • 2016-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多