簡體   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