【问题标题】:Setting image Uri in GridView在 GridView 中设置图像 Uri
【发布时间】:2016-02-17 17:01:59
【问题描述】:

我正在尝试使用其 uri 将您手机图库中的图像添加到 gridView 中。 不幸的是,它没有做任何事情,我似乎找不到让它工作的方法。

我的适配器:

public class ImageGridAdapter extends BaseAdapter {


public Uri imageUri;


private Context mContext;

public ImageGridAdapter(Context c) {
    this.mContext = c;
}

@Override
public int getCount() {

    return 0;
}

@Override
public Object getItem(int position) {

    return null;
}

@Override
public long getItemId(int position) {

    return 0;
}


public View getView(int position, View convertView, ViewGroup parent) {

    imageUri = PictureGroupActivity.selectedImage;


    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageURI(null);
    imageView.setImageURI(imageUri);

    return imageView;
   }
}

adpater 应该从 onActivtyResult 获取 imageUri:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    gridView = (GridView)findViewById(R.id.picture_group_gridView);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
        selectedImage = data.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};
        Toast.makeText(PictureGroupActivity.this, "selectedImage ma hodnotu: " + selectedImage, Toast.LENGTH_SHORT).show();


    }
}

我在我的活动中的 onCreate 中设置了 gridView:

GridView gridView = (GridView)findViewById(R.id.picture_group_gridView);
    gridView.setAdapter(new ImageGridAdapter(this));

    gridView.invalidateViews();

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(PictureGroupActivity.this, "You clicked " + position, Toast.LENGTH_SHORT).show();
        }
    });

从图库中选择照片时,gridView 保持为空。你我怎么让它工作?我究竟做错了什么 ?提前谢谢你。

【问题讨论】:

    标签: android gridview uri gallery adapter


    【解决方案1】:
    public class ImageGridAdapter extends BaseAdapter {
    
    
    public Uri imageUri;
    
    
    private Context mContext;
    
    public ImageGridAdapter(Context c) {
        this.mContext = c;
    }
    
    @Override
    public int getCount() {
    
        return 5;
    }
    
    @Override
    public Object getItem(int position) {
    
        return null;
    }
    
    @Override
    public long getItemId(int position) {
    
        return 0;
    }
    
    
    public View getView(int position, View convertView, ViewGroup parent) {
    
        imageUri = PictureGroupActivity.selectedImage;
    
    
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }
    
        imageView.setImageURI(null);
        imageView.setImageURI(imageUri);
    
        return imageView;
       }
    }
    

    【讨论】:

    • 谢谢,终于搞定了! :D 它将图片添加到 gridView 中(将 5 更改为 1)但是当添加另一张图片时它会覆盖,你如何让它保持不变?
    • 将 PictureGroupActivity.selectedImage 更改为 ArrayList 。获得图像后,将 uri 存储在其中。并在 getitemcount 中返回列表的大小。
    【解决方案2】:

    如果您总是从 getCount() 返回 0,那么您的列表将始终为空。同样,您需要从getItem() 返回一些内容,以便您的视图知道哪些数据与哪个列表项相关联。您可能希望使用更具体的 Adapter 实现,例如 ArrayAdapter,它可以为您处理其中的一些问题。

    【讨论】:

    • 很公平,我在 getCount() 中返回了 1,现在它最终显示在 gridView 中。我现在希望当我添加另一个图像时图像保留在那里,有什么帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多