Android 使recyclerView通过单击recyclerView项从相机或多媒体资料中选择图像

Android 使recyclerView通过单击recyclerView项从相机或多媒体资料中选择图像,android,android-recyclerview,android-imageview,Android,Android Recyclerview,Android Imageview,我想将recyclerview的第一个项目设置为带有“添加图像徽标”的“图像视图”,单击该项目后,从“多媒体资料”中选择一个图像,并将其设置为“图像视图”的背景,将第二个项目的背景设置为“添加图像徽标” 这可以通过这种方式完成 使用包含图像URL的自定义对象创建ArrayList 仅在ArrayList上添加一个对象 将适配器设置为从ArrayList显示 在回收器视图的绑定视图保持器中,如果url不存在,则显示addimageLogo 然后单击图像,在该位置的对象上添加一个图像(路径/URL)

我想将recyclerview的第一个项目设置为带有“添加图像徽标”的“图像视图”,单击该项目后,从“多媒体资料”中选择一个图像,并将其设置为“图像视图”的背景,将第二个项目的背景设置为“添加图像徽标”


这可以通过这种方式完成

  • 使用包含图像URL的自定义对象创建ArrayList
  • 仅在ArrayList上添加一个对象
  • 将适配器设置为从ArrayList显示
  • 在回收器视图的绑定视图保持器中,如果url不存在,则显示addimageLogo
  • 然后单击图像,在该位置的对象上添加一个图像(路径/URL)
  • 在对象上添加图像后,检查最后一个对象是否具有URL,然后再次检查第2点
  • notifydataSetChanged()
  • 自定义对象

    public class URLContainer{
    
        public URLContainer(String url, String imageName) {
            this.url = url;
            this.imageName = imageName;
        }
    
        String url;
        String imageName;// you can use other  required properties if you want
    }
    
    ArrayList

    private ArrayList<URLContainer> images = new ArrayList<>();
    

    默认情况下,您需要将“添加图像”徽标设置为ImageView。在适配器内部,向ImageView添加OnClickListener(),并编写代码以打开图库以获取图像,这将对您有所帮助

  • 将viewType变量添加到数据类中。在您的情况下,您可以使用“按钮”和“图像”
  • 将第一个对象的viewType值设置为“按钮”
  • 使用多个ViewHolder方法实现Recyclerview
  • 覆盖getItemViewType

    override fun getItemViewType(position: Int): Int {
            return when (orders[position].viewType) {
                ViewType.Button-> 1
                ViewType.Image-> 2
                else -> 1
            }
        }
    
    onCreateViewHolder

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
                val viewHolder: RecyclerView.ViewHolder
                when (viewType) {
                    1 -> {
                        val buttonBinding = DataBindingUtil.inflate<ItemButtonBinding>(
                            LayoutInflater.from(parent.context),
                            R.layout.item_button, parent, false
                        )
                        viewHolder = ButtonViewHolder(buttonBinding .root)
                    }
                    2 -> {
                        val imageBinding = DataBindingUtil.inflate<ItemImageBinding>(
                            LayoutInflater.from(parent.context),
                            R.layout.item_image, parent, false)
                        viewHolder = ImageViewHolder(imageBinding .root)
                    }
                    else -> {
                        val imageBinding = DataBindingUtil.inflate<ItemImageBinding>(
                            LayoutInflater.from(parent.context),
                            R.layout.item_image, parent, false)
                        viewHolder = ImageViewHolder(imageBinding .root)
                    }
                }
                return viewHolder
          }
    
    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    
                when (holder.itemViewType) {
                    1 -> {
                        val buttonViewHolder = holder as ButtonViewHolder
                        configureButtonViewHolder(buttonViewHolder , position)
                    }
                    2 -> {
                        val imageViewHolder = holder as ImageViewHolder
                        configureImageViewHolder(imageViewHolder , position)
                    }
                    else -> {
                        val imageViewHolder = holder as ImageViewHolder
                        configureImageViewHolder(imageViewHolder , position)
                    }
                }
            }
    
    OnClickListener
    设置在Button-ItemView中的Button-ViewHolder类中,并将图像选择器意图代码放置在
    OnClickListener


    参考此

    此问题太宽泛了。可能是重复的,非常感谢,非常有用,但我正在使用java,你能用java编写代码吗
    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    
                when (holder.itemViewType) {
                    1 -> {
                        val buttonViewHolder = holder as ButtonViewHolder
                        configureButtonViewHolder(buttonViewHolder , position)
                    }
                    2 -> {
                        val imageViewHolder = holder as ImageViewHolder
                        configureImageViewHolder(imageViewHolder , position)
                    }
                    else -> {
                        val imageViewHolder = holder as ImageViewHolder
                        configureImageViewHolder(imageViewHolder , position)
                    }
                }
            }