Как использовать средство выбора изображений в окне рециркуляции - PullRequest
0 голосов
/ 24 октября 2019

Я использую RecyclelerView для отображения сведений о нескольких лицах, у пользователя есть возможность загрузить изображение для человека, моя проблема заключается в том, как выбрать изображение в RecyclerView и получить разрешение на хранение, так как onActivityResult работает только в действии.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Я решил проблему, используя следующий код

// Binds each guest in the ArrayList to a view
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.guestNumber.text = "Guest "+ (position+1)
    holder.constraint.setVisibility(View.GONE)
    holder.image.setImageURI(images[position])
    holder.firstName.text = guests[position].name.split(" ").first()
    holder.lastName.text = guests[position].name.split(" ").last()

    holder.image.setOnClickListener{


        requestPermissions(it.context as Activity , arrayOf(WRITE_EXTERNAL_STORAGE),1)

        this.position=holder.adapterPosition
        val intent = Intent(Intent.ACTION_GET_CONTENT)
        intent.addCategory(Intent.CATEGORY_OPENABLE)
        intent.type = "image/*"
        (it.context as Activity).startActivityForResult(intent, 1, Bundle())
        (it.context as Activity).onActivityReenter(1,intent)
    }
}

MainActivity

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) {
        1 -> {/*file front*/
            if (resultCode == Activity.RESULT_OK && data != null) {
                imageList[adapter!!.position!!]  = data.data as Uri
                adapter!!.notifyDataSetChanged()
            }
        }
    }
}
0 голосов
/ 24 октября 2019
String  mCurrentPhotoPath ; 
public void onActivityResult(int requestCode, int resultCode, Intent data) {
            Log.i(TAG, "onActivityResult " + resultCode);
            switch (requestCode) {
                case RESULT_LOAD_IMAGE:
                    if (resultCode == Activity.RESULT_OK) {
                        if (data != null) {
                            Uri contentURI = data.getData();
                            String path = null;
                            try {
                                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),contentURI);
                                path = saveImage(bitmap);
                                //   decodeImage(path);
                                img.setImageBitmap(bitmap);

                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            mCurrentPhotoPath = path;
                        }
                    }
                    break;
}     


public void activeGallery() {
        Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

        startActivityForResult(galleryIntent,RESULT_LOAD_IMAGE);

}

попробуйте это @ user678413, вам нужно добавить разрешение в действие не в классе адаптера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...