Изображения RecyclerView не отображаются при первой загрузке, только refre sh или прокрутка - PullRequest
0 голосов
/ 16 июня 2020

После добавления logi c для программного изменения размеров изображений в recyclerView эти изображения теперь будут отображаться только при refre sh или прокрутке.

Метод, вызываемый в onBindViewHolder:

 fun bindCommunityImageOffer(model: CommunityOffer) {

            val requestListener = object : RequestListener<Drawable> {
                override fun onLoadFailed(e: GlideException?, imageModel: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {

                    Timber.d("bindCommunityImageOffer() - Binding cover image failed because ${e?.message}")
                    return false
                }

                override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean):Boolean{
                    Timber.d("bindCommunityImageOffer() - Binding cover image success")

                    return false
                }

            }

            Interactors.glide.loadImage(model.coverUrl, communityImageIv, requestListener)


            if (!model.mediaAspectRatio.isNullOrEmpty()) {

                val aspectRatioSplit = model.mediaAspectRatio.split(":")
                val widthRatio = Integer.parseInt(aspectRatioSplit[0])
                val heightRatio = Integer.parseInt(aspectRatioSplit[1])

                communityImageIv.scaleType = ImageView.ScaleType.FIT_XY

                if (widthRatio == heightRatio) {

                    communityImageIv.layoutParams.height = communityImageIv.width
                    communityImageCl.layoutParams.height = communityImageCl.width

                } else {

                    communityImageIv.layoutParams.height = ((communityImageIv.width.toFloat() / widthRatio.toFloat()) * heightRatio).toInt()
                    communityImageCl.layoutParams.height = ((communityImageCl.width.toFloat() / widthRatio.toFloat()) * heightRatio).toInt()

                }

            } else {

                communityImageIv.scaleType = ImageView.ScaleType.CENTER_CROP
                val widthRatio = 25
                val heightRatio = 21
                communityImageIv.layoutParams.height = ((communityImageIv.width.toFloat() / widthRatio.toFloat()) * heightRatio).toInt()
                communityImageCl.layoutParams.height = ((communityImageCl.width.toFloat() / widthRatio.toFloat()) * heightRatio).toInt()

            }
    }

Макет связанного вида:

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/communityImageCv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:elevation="16dp"
    app:cardCornerRadius="10dp"
   >


    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/communityImageCl"
        android:layout_width="match_parent"
        android:layout_height="0dp">

        <androidx.appcompat.widget.AppCompatImageView
            android:id="@+id/communityImageIv"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:scaleType="fitXY"
            android:background="@color/transparent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:src="@color/alpha_grey" />

    </androidx.constraintlayout.widget.ConstraintLayout>


</androidx.cardview.widget.CardView>

Ни в моем действии, ни в макете xml код не изменился. Единственное, что я добавил, - это код, который программно изменяет его размер. Как это сломало привязку?

Примечание: onBindViewHolder вызывается для невидимых представлений, но определенный наверху прослушиватель Glide не срабатывает.

1 Ответ

0 голосов
/ 18 июня 2020

Я добавил .skipMemoryCache (true) к моему вызову Glide.

...