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

标签 android android-imageview android-gridview

我正在尝试从图库中选择图像并尝试在 gridview 中显示它,但它没有在 gridview 中设置,以下是我的代码 fragment ,任何人都可以告诉我我的代码有什么问题吗?提前致谢

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>

最佳答案

I am trying to select image from gallery and trying to display it in gridview but it is not setting in gridview

在 ImageAdapter 类中做以下更改:

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

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();

关于android - 从图库中选择图像后未在 gridview 中设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29713778/

相关文章:

android - 放大图像以填充 Android 中的整个 ImageView

java - Android - 图像缩放库

Android GridView - 滚动时随机定位

android GridView 从右到左放置项目

机器人/数据库/SqLite/ORM

android - 如何在Android中对HashMap(ArrayList内部)进行排序?

java - 如何使用 OpenGL ES 2.0 和 Java (Android) 使用索引缓冲区绘制顶点

java - 使用 SharedPreferences 的许多用户登录

android - 如何让ImageView根据固定高度匹配宽度?

android - 在不重新填充的情况下更新 GridView/ListView