Java 将应用程序图标从listView获取到gridView

Java 将应用程序图标从listView获取到gridView,java,android,android-listview,android-gridview,android-icons,Java,Android,Android Listview,Android Gridview,Android Icons,我有一个用户安装应用程序的列表视图。以下是每个listView项目的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredIte

我有一个用户安装应用程序的列表视图。以下是每个listView项目的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="?android:attr/listPreferredItemHeight"
 android:padding="5dip" 
 >

 <ImageView
  android:id="@+id/ivIcon"
  android:layout_width="wrap_content"
  android:layout_height="fill_parent"
  android:layout_marginRight="5dip"
  android:scaleType="center"
  android:contentDescription="@string/desc"
 />

 <LinearLayout
  android:orientation="vertical"
  android:layout_width="0dip"
  android:layout_height="fill_parent"
  android:layout_weight="1"    
 >

  <TextView
      android:id="@+id/tvName"
      android:layout_width="fill_parent"
      android:layout_height="0dip"
      android:layout_weight="1"
      android:gravity="center_vertical"         
  />

  <TextView
      android:id="@+id/tvPack"
      android:layout_width="fill_parent"
      android:layout_height="0dip"
      android:layout_weight="1"
      android:singleLine="true"
      android:ellipsize="marquee"         
  />

</LinearLayout>

<CheckBox
  android:id="@+id/addCheckbox"
  android:layout_width="0dp"
  android:layout_height="fill_parent"
  android:layout_weight="0.3"
  android:gravity="center_vertical"
  android:focusable="false" 
/>

</LinearLayout>
有意:

Intent intent = new Intent(v.getContext(), GridViewAdapter.class);
                                intent.hasExtra("bitmapA");
                                v.getContext().startActivity(intent);
接收班:

try {
        FileInputStream in = Context.openFileInput("bitmapA");
        BufferedInputStream buf = new BufferedInputStream(in);
        byte[] bitMapA = new byte[buf.available()];
        buf.read(bitMapA);
        Bitmap bM = BitmapFactory.decodeByteArray(bitMapA, 0, bitMapA.length);
        view.setImageBitmap(bM);
        if (in != null) {
            in.close();
        }
        if (buf != null) {
            buf.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

当您说您尝试了FileInput/Outputstream时,我猜您是想保存到一个(临时的?)文件,传递文件路径,然后从文件中读取?你对这种方法到底有什么问题,我看不出这种方法目前不起作用的原因。对,我遇到的最大问题就是让它从flieoutput流中读取。我以前没有真正尝试过这种方法,所以我只是想弄清楚如何去做,特别是因为我在extend BaseAdapter上创建了FileInput/Outputstreams这两个类。注意到你之前发布的答案(顺便说一句,很抱歉花了很长时间才回复),我明白你所说的我可能在寻找错误的文件名(即“picture”,而不是创建文件时创建的任何随机名称)的意思,有什么方法可以知道它创建了什么名称?事实上,在环顾四周之后,我不想使用openFileInput和openFileOutput吗?如果没有,我总是可以把它改回去,但是我稍微改变了我的编码。如果你也能看一下,我会安抚它的。(它将只是我的fileinput和output流类)
package com.example.awesomefilebuilderwidget;
IMPORTS 
public class GridViewAdapter extends BaseAdapter {
private Context Context;

// Keep all Images in array list
public ArrayList<Integer> drawables = new ArrayList<Integer>();

// Constructor
public GridViewAdapter(Context c){
    Context = c;
    Log.d("GridViewAdapter", "Constructor is set");

    drawables.add(R.drawable.pattern1);
    Log.d("GridViewAdapter", "pattern1 added");

    drawables.add(R.drawable.pattern2);
    Log.d("GridViewAdapter", "pattern2 added");

    drawables.add(R.drawable.trashcan);
    Log.d("GridViewAdapter", "trashcan added");

    drawables.add(R.drawable.ic_launcher);
    Log.d("GridViewAdapter", "ic_launcher added");

    Bitmap default_b = BitmapFactory.decodeFile("picture");  
}

@Override
// How many items are in the data set represented by this Adapter
public int getCount() {
    return drawables.size();
}

@Override
// Get the data item associated with the specified position in the
// data set
public Object getItem(int position) {
    return drawables.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Try to reuse the views
    ImageView view = (ImageView) convertView;
    // if convert view is null then create a new instance else reuse it
    if (view == null) {
        view = new ImageView(Context);
        Log.d("GridViewAdapter", "new imageView added");
    }
    try {
        FileInputStream in = new FileInputStream("picture");
        BufferedInputStream buf = new BufferedInputStream(in);
        byte[] bitMapA = new byte[buf.available()];
        buf.read(bitMapA);
        Bitmap bM = BitmapFactory.decodeByteArray(bitMapA, 0, bitMapA.length);
        view.setImageBitmap(bM);
        if (in != null) {
            in.close();
        }
        if (buf != null) {
            buf.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    view.setImageResource(drawables.get(position));
    view.setScaleType(ImageView.ScaleType.CENTER_CROP);
    view.setLayoutParams(new android.widget.GridView.LayoutParams(70, 70));
    view.setTag(String.valueOf(position));
    return view;
}

}
    public void SaveImage(Bitmap default_b) {

    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/saved_images");
    myDir.mkdirs();
    Random generator = new Random();
    int n = 100000;
    n = generator.nextInt(n);
    String fname = "Image-" + n +".png";
    File file = new File (myDir, fname);
    if (file.exists()) file.delete();
    try {
        File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
                + "/" + fname + ".png");
        FileOutputStream out = mContext.getApplicationContext().openFileOutput("bitmapA", Context.MODE_WORLD_WRITEABLE);
        default_b.compress(Bitmap.CompressFormat.PNG, 90, out);
        out.flush();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Intent intent = new Intent(v.getContext(), GridViewAdapter.class);
                                intent.hasExtra("bitmapA");
                                v.getContext().startActivity(intent);
try {
        FileInputStream in = Context.openFileInput("bitmapA");
        BufferedInputStream buf = new BufferedInputStream(in);
        byte[] bitMapA = new byte[buf.available()];
        buf.read(bitMapA);
        Bitmap bM = BitmapFactory.decodeByteArray(bitMapA, 0, bitMapA.length);
        view.setImageBitmap(bM);
        if (in != null) {
            in.close();
        }
        if (buf != null) {
            buf.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }