【问题标题】:Want to add photos from gallery into a GridView (Android Studio)想要将图库中的照片添加到 GridView (Android Studio)
【发布时间】:2016-08-28 04:05:04
【问题描述】:

我的目标是能够单击“上传图片”并将其显示在类似于个人资料上的 instagram 提要的网格视图上(不是滚动提要,网格提要)。老实说,我非常迷茫,只是尝试了我在网上网站上找到的不同方法,但没有任何效果。

主活动:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private static final int RESULT_LOAD_IMAGE = 1;
    private ArrayList<Image> items = new ArrayList<Image>();

    ImageView uploadedImage;
    Button bUploadImage;


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

        bUploadImage = (Button)findViewById(R.id.bUploadImage);
        bUploadImage.setOnClickListener(this);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this,R.id.bUploadImage,items));

        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
                Toast.makeText(MainActivity.this, "" + position,
                        Toast.LENGTH_SHORT).show();
            }
        });

    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.bUploadImage:
                Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE);
                break;

        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null){
            Uri selectedImage = data.getData();
            uploadedImage.setImageURI(selectedImage);
            Image i = new Image();
            i.setURI(selectedImage);
            items.add(i);

        }
    }
}

图像适配器:

public class ImageAdapter extends ArrayAdapter<Image> {
    private Context mContext;
    private ArrayList<Image> items;

    public ImageAdapter(Context context, int textViewResourceId, ArrayList<Image> items) {
        super(context, textViewResourceId, items);
        mContext = context;
        this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            // if it's not recycled, initialize some attributes
            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;
        }
        if (position == 0)
            imageView.setImageURI(items.get(position).getURI());
        return imageView;
    }
}

图像类:

public class Image {
    private Uri imgURI;

    public Uri getURI(){
        return imgURI;
    }

    public void setURI(Uri imgURI){
        this.imgURI = imgURI;
    }

}

我见过很多在网格上显示图像的方法,但没有一个使用画廊中的图像。在我上面的代码中,我尝试将图像的 Uri 从图库传递到适配器,但我对适配器的工作原理感到困惑。我是 Android Studio 的初学者。任何指导都是有帮助的,谢谢!

【问题讨论】:

标签: android gridview android-arrayadapter android-adapter


【解决方案1】:

代替 onCreate 中的以下行

gridview.setAdapter(new ImageAdapter(this,R.id.bUploadImage,items));

创建类级适配器

private ImageAdapter adapter;

在 onCreate() 中

adapter = new ImageAdapter(this,R.id.bUploadImage,items)
gridview.setAdapter(adapter);

在 onActivityResult 之后 item.add 调用 adapter.notifyDatasetChanged。

【讨论】:

  • 我无法在 MainActivity 中添加调用“adapter.notifyDatasetChanged”,不知道为什么。
  • 你在调用adapter.notifyDataSetChanged()吗(这是准确的拼写,试试这个)否则给我一些细节。
猜你喜欢
  • 2021-10-28
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多