代码之家  ›  专栏  ›  技术社区  ›  Tony Merritt

将从图像选取器中选取的图像添加到回收器视图、Android Studio、Kotlin

  •  1
  • Tony Merritt  · 技术社区  · 6 年前

    我已经用Swift编程3年了,我是Android开发的新手,我正在尝试从图像选择器中选择一个图像,并将其放入回收器视图,我可以使用可绘制文件夹中的硬编码图像来完成此操作,但不知道如何使用我选择的图像来完成此操作。

    当我选择一个图像时,它是成功的,我可以显示图像文件路径

    i/system.out:tony image path is/document/raw:/storage/emulated/0/download/max.jpg

    当我试图将它添加到可绘制文件夹中已经硬编码的图像名称数组中时,它会显示这些图像,并在末尾显示一个空白的空间。

    我想这是因为我正在从可绘制文件夹中获取硬编码图像,而这个选取的图像可能不在该文件夹中?

    我不希望最终产品中的硬编码图像,这只是为了看到循环视图工作。

    我也不会将它们保存到应用程序中填写了所有feid后将它们上载到数据库的设备中,因此它们不会添加到BA中。

    我的回收视图

    class ArtistRecycleAdapter(val context: Context, val artists: List<ArtistImages>) : RecyclerView.Adapter<ArtistRecycleAdapter.ArtistHolder>() {
    
    
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ArtistHolder {
        val view = LayoutInflater.from(context).inflate(R.layout.images_added, parent, false)
        return  ArtistHolder(view)
    
    }
    
    override fun getItemCount(): Int {
        return artists.count()
    }
    
    override fun onBindViewHolder(holder: ArtistHolder, position: Int) {
        holder.bindProduct(artists[position], context)
    }
    
    
    inner class ArtistHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    
        val artistImage = itemView?.findViewById<ImageView>(R.id.artistImageMain)
    
        fun bindProduct(artists: ArtistImages, context: Context) {
            val resourceId = context.resources.getIdentifier(artists.artistImage, "drawable", context.packageName)
    
    
            artistImage?.setImageResource(resourceId)
    
        }
    }
    
    }
    

    我的活动结果

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    
        super.onActivityResult(requestCode, resultCode, data)
    
        if (requestCode == PICK_IMAGE_MULTIPLE && resultCode == Activity.RESULT_OK
            && null != data
        ) {
            if (data.getClipData() != null) {
                var count = data.clipData.itemCount
                for (i in 0..count - 1) {
                    var imageUri: Uri = data.clipData.getItemAt(i).uri
                    getPathFromURI(imageUri)
                    println("Tony image uri is $imageUri")
                }
            } else if (data.getData() != null) {
                var imagePath: String = data.data.path
                Log.e("imagePath", imagePath)
                println("Tony image path is $imagePath")
    
                DataService.artistImages.add(ArtistImages(imagePath))
                adapter.notifyDataSetChanged()
    
            }
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Alexander Hoffmann    6 年前

    我在您的代码中看到的是,您不会区分来自资源文件夹的图像和来自意向请求的图像。

    你不能用 setImageResource(resourceId) 设置图像如果 resourceId 是URI。 setImageResource 例外的int是资源的ID。

    使用 setImageURI(uri) 相反。

    编辑,在评论中讨论后添加:

    然后,您可以使用resourceID删除整个部分,并将URI存储在ArtistImage类中,然后这样访问它:

    fun bindProduct(artists: ArtistImages, context: Context) {
        artistImage?.setImageResource(artists.artistImage)
    
    }