繁体   English   中英

如何recyclerview适配器imageview选择打开相机获取图像并从照片库中选择一张图片?

[英]how to recyclerview adapter imageview select open camera get image and choose a picture from the photo gallery?

只需单击 recyclerview 上的 imageview,我想从照片库中选择一张图片。我也可以 imageview 我添加了活动,但我无法将其添加到 recyclerview 适配器。

我在活动中的代码,我想在单击 recyclerview 中的 imageview 时执行此操作。 我怎样才能做到这一点 ?

private void showPictureDialog() {
    AlertDialog.Builder pictureDialog = new AlertDialog.Builder(this);
    pictureDialog.setTitle(R.string.selectAction);
    String[] pictureDialogItems = {
            "Galeriden fotağraf seçiniz",
            "Kameradan fotağraf seçiniz"};
    pictureDialog.setItems(pictureDialogItems,
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                        case 0:
                            choosePhotoFromGallary();
                            break;
                        case 1:
                            takePhotoFromCamera();
                            break;
                    }
                }
            });
    pictureDialog.show();
}

void choosePhotoFromGallary() {
    Intent galleryIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    startActivityForResult(galleryIntent, 1);
}

void takePhotoFromCamera() {
    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, 2);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == this.RESULT_CANCELED) {
        return;
    }
    if (requestCode == 1) {
        if (data != null) {
            Uri contentURI = data.getData();
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentURI);
                Toast.makeText(MainActivity.this, R.string.imageSaved, Toast.LENGTH_SHORT).show();
                imgview.setImageBitmap(bitmap);
                mycontrol = true;

            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(MainActivity.this, R.string.fail, Toast.LENGTH_SHORT).show();
            }
        }

    } else if (requestCode == 2) {
        Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
        imgview.setImageBitmap(thumbnail);
        saveImage(thumbnail);
        Toast.makeText(MainActivity.this, R.string.imageSaved, Toast.LENGTH_SHORT).show();
        mycontrol = true;
    }
}

您可以在您的适配器中创建一个用于单击项目的接口。

例如:

interface ImageClickListener{
      void onImageClicked();
}

在 Adapter 视图持有者方法中,如下所示。

public static class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private YourModel mItem;
        private ItemClickListener mItemListener;

          public ItemViewHolder(View itemView, ItemClickListener listener) {
               super(itemView);
               mItemListener = listener;
               itemView.setOnClickListener(this);
      }

        @Override
    public void onClick(View v) {



        switch (v.getId()) {
            case R.id.view_id:
                mItemListener.onItemClicked(); // You can send any field or model as a param here.
                break;

            default:
                break;
        }

    }

 }

之后,您可以在 Activity/Fragment 中实现此接口,并可以为单击事件编写代码,例如:

 @Override
    public void onImageClicked() {
        //showPictureDialog();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM