Как добавить слушателя в recyclerview, когда изображение готово для отображения

В настоящее время у меня есть приложение, которое использует Picasso для загрузки изображений и отображения их в программе recyclerview.

Я хочу изменить свою логику, полностью отказавшись от Пикассо и загрузив изображения в фоновом режиме при первоначальной установке приложения. Во время последующих запусков приложения изображения будут отображаться из внутренней памяти.

Итак, как я могу сообщить recyclerview, что изображение готово к отображению после того, как оно было успешно сохранено во внутреннем хранилище? Я бы предпочел, чтобы они не показывались все сразу, потому что это займет слишком много времени, но показывать каждое изображение по завершении загрузки (что-то вроде того, как это делает Пикассо).

Это мой текущий код onBindViewHolder:

 override fun onBindViewHolder(rawHolder: RecyclerView.ViewHolder, position: Int) {
        val holder = rawHolder as CustomVH
        holder.resourcesByCategory = resourcesByCategory[position]

        val dir : String = utils.getInternalDirectory("Covers") + "/CoverBookId" +  resourcesByCategory[position].id + ".jpg"
        val bookCover = File(dir)
        if (bookCover.exists()) {
            if (holder.bmp != null) {
                holder.bmp!!.recycle()
            }

            holder.resourceCover.setImageBitmap(null)
            val options = BitmapFactory.Options()
            options.inPreferredConfig = Bitmap.Config.RGB_565
            holder.bmp = BitmapFactory.decodeStream(FileInputStream(bookCover), null, options)

            if (holder.bmp != null) {
                holder.bmp = Bitmap.createScaledBitmap(holder.bmp, 150,180, true)
                holder.resourceCover.setImageBitmap(holder.bmp!!)
            }

        }

    }

Я думаю, что AsyncTask - это то, что вам нужно developer.android.com/reference/android/os/AsyncTask

TaQuangTu 18.12.2018 05:33

Я не (и, вероятно, никто не будет) рекомендовать делать это вручную, см. medium.com/@afomic/…

Omar Mainegra 18.12.2018 05:55
0
2
61
0

Другие вопросы по теме