В настоящее время у меня есть приложение, которое использует 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!!)
}
}
}
Я не (и, вероятно, никто не будет) рекомендовать делать это вручную, см. medium.com/@afomic/…
Я думаю, что AsyncTask - это то, что вам нужно developer.android.com/reference/android/os/AsyncTask