【问题标题】:How to use image picker inside recycler view如何在回收站视图中使用图像选择器
【发布时间】:2019-10-24 06:16:26
【问题描述】:

我正在使用 recyclerview 显示多人的详细信息,用户可以选择为一个人上传图像,我的问题是如何在 recyclerview 中选择图像并获得存储权限,因为 onActivityResult 仅适用于活动。

【问题讨论】:

  • 那么问题是什么?你试过什么?
  • 我尝试在 onBindViewHolder 上使用获取权限,但只能在活动中获得权限,onActivityResult 也适用于活动我没有找到从存储中选择图像的方法
  • 所以从活动调用方法到适配器或在适配器类中制作监听器
  • 我可以让适配器类中的监听器没有问题,但是如何调用 onActivityResult
  • 它的覆盖方法。当你开始 startActivityForResult 覆盖该方法

标签: android kotlin android-recyclerview


【解决方案1】:
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,你需要在activity中添加权限,而不是在适配器类中

【讨论】:

  • OP 想从适配器访问它。
【解决方案2】:

我用下面的代码解决了这个问题

// 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)
    }
}

主活动

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()
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2021-09-24
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多