从图库中选择图像后,未在gridview中设置

时间:2015-04-18 06:27:25

标签: android android-imageview android-gridview

我正在尝试从图库中选择图片并尝试在gridview中显示它,但它不是在gridview中设置,以下是我的代码段,有人能告诉我我的代码有什么问题吗?提前致谢

public class MainActivity extends Activity {

private static int RESULT_LOAD_IMAGE = 1;
private ImageView imageView;
private Uri selectedImage;
private int columnIndex;
private GridView gridView;
private String picturePath;
private ImageView imageView11;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button buttonLoadImage = (Button) findViewById(R.id.buttonLoadPicture);
    gridView = (GridView) findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(this));

    gridView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> parent, 
        View v, int position, long id) 
        {                
            Toast.makeText(getBaseContext(), 
                    "pic" + (position + 1) + " selected", 
                    Toast.LENGTH_SHORT).show();
        }
    });        
    buttonLoadImage.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("image/*");
            startActivityForResult(intent, 1);
        }
    });
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
        selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();



        imageView = (ImageView) findViewById(R.id.imgView);
        imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));

        columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        objImageAdapter.addToList(picturePath);
        cursor.close();


    }


}

    public class ImageAdapter extends BaseAdapter 
  {
private Context context;
ArrayList<String> arrayList;

public ImageAdapter(Context c) 
{
    context = c;
}

//---returns the number of images---
public int getCount() {
    return arrayList.size();
}

//---returns the ID of an item--- 
public Object getItem(int position) {
    return position;
}

void addToList(String strPath)
{
    this.arrayList.add(strPath);
    this.notifyDataSetChanged();
}
public long getItemId(int position) {
    return position;
}

//In this array you have to store all images path which is you want to display in baseapater and must be global to access in baseapater  

public View getView(int position, View convertView, ViewGroup parent) 
{
    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(context);
        imageView.setLayoutParams(new GridView.LayoutParams(185, 185));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(5, 5, 5, 5);
    } else {
        imageView = (ImageView) convertView;
    }
    String path = arrayList.get(position);
    Bitmap myBitmap = BitmapFactory.decodeFile(path);
    imageView.setImageBitmap(myBitmap);
    return imageView;
}

}

activity_main.xml中

    <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
       android:layout_width="fill_parent"
      android:layout_height="fill_parent">

         <GridView 
      android:id="@+id/gridview"
        android:layout_width="wrap_content" 
         android:layout_height="wrap_content"
       android:columnWidth="90dp"
          android:numColumns="auto_fit"
        android:verticalSpacing="10dp"
       android:horizontalSpacing="10dp"
         android:stretchMode="columnWidth"
          android:gravity="center"
         />
     <ImageView
    android:id="@+id/imgView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"></ImageView>
<Button
    android:id="@+id/buttonLoadPicture"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0"
    android:text="Load Picture"
    android:layout_gravity="center"></Button>
  </LinearLayout>

3 个答案:

答案 0 :(得分:1)

你是如何在setImageResource中的imageView.setImageResource()中设置位置的,如果你设置Gridview单元格的位置比它不能显示图像,因为它只是位置变量,单元格索引是存储的喜欢0,1,2。 您需要设置位图或资源ID乱伦&#34; positon&#34;在你的Baseadapter getView方法中。

答案 1 :(得分:1)

  

我正在尝试从图库中选择图片并尝试将其显示出来   gridview但它没有在gridview中设置

在ImageAdapter类中执行以下更改:

1。arrayList方法返回getCount的大小:

public int getCount() {
    return arrayList.size();
}

2. 创建一种在当前适配器数据源中添加新选定图像的方法:

void addToList(String strPath)
{
    this.arrayList.add(strPath);
    this.notifyDataSetChanged();
}

现在使用onActivityResult调用addToList方法在GridView中显示所选图像:

columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
objImageAdapter.addToList(picturePath);
cursor.close();

答案 2 :(得分:0)

首先,将所有Gallery图像路径存储在全局arrayList中,然后将getView方法的位置放到数组中,然后获取特定适配器单元的单一路径,之后就像belove code一样

ArrayList<String> arrayList; //In this array you have to store all images path which is you want to display in baseapater and must be global to access in baseapater  

public View getView(int position, View convertView, ViewGroup parent) 
{
    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(context);
        imageView.setLayoutParams(new GridView.LayoutParams(185, 185));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(5, 5, 5, 5);
    } else {
        imageView = (ImageView) convertView;
    }
    String path = arrayList.get(position);
    Bitmap myBitmap = BitmapFactory.decodeFile(path);
    imageView.setImageBitmap(myBitmap);
    return imageView;
}