Добавление изображений, выбранных из средства выбора изображений, в вид утилизатора, Android Studio, Kotlin - PullRequest
0 голосов
/ 04 января 2019

Я программирую на Swift в течение 3 лет, и я новичок в разработке для Android, я пытаюсь выбрать изображение из средства выбора изображений и перевести его в режим утилизации, я могу сделать это с помощью жестко закодированных изображений, которые находятся в моем папку для рисования, но я не знаю, как это сделать с выбранными изображениями.

Когда я выбираю изображение, оно успешно, и я могу показать путь к файлу изображения

I / System.out: путь к изображению Тони - /document/raw:/storage/emulated/0/Download/Max.jpg

Когда я пытаюсь добавить его в массив уже жестко закодированных имен изображений в папке для рисования, он показывает их изображения и в конце остается пустое пространство

Полагаю, это потому, что я получаю жестко запрограммированные изображения из папки для рисования, а это выбранное изображение, возможно, не в этой папке?

Я не хочу, чтобы в конечном продукте были жестко запрограммированные изображения, это было просто для того, чтобы увидеть, как работает вид корзины.

Я также не сохраняю их на устройстве, которое они загружают в базу данных после того, как все фиды заполнены в приложении, поэтому они не добавляются в список ролей камеры.

My Recycle View

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 Ответ

0 голосов
/ 04 января 2019

Что я вижу в вашем коде, так это то, что вы не различаете изображения из папки вашего ресурса и изображения, полученные из вашего намеренного запроса.

Вы не можете использовать setImageResource(resourceId) для установки изображения, если resourceId - это URI. setImageResource исключает int, который является идентификатором ресурса.

Вместо этого используйте setImageURI(uri).

Редактировать, добавил это после обсуждения в комментариях:

Затем вы можете удалить всю деталь с помощью resourceId и сохранить uri в своем классе ArtistImage, а затем получить к нему доступ следующим образом:

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

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