TextView показывает только первую букву в RecyclerView - PullRequest
1 голос
/ 06 мая 2019

В моем приложении у меня есть RecyclerView, отображающий продукты с изображением и названием. Макет использует ConstraintLayout (версия 2.0.0-alpha5), а ширина TextView зависит от ширины изображения. Я хочу, чтобы заголовок был singleLine, поэтому я объявил maxLines = 1 (я также использовал атрибут singleLine, чтобы увидеть, если это было проблемой), и я ожидал, что будет отображено первое слово, однако оно (очевидно) случайным образом показывает только первая буква.

Это мой макет:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="wrap_content"
                                               android:layout_height="match_parent"
                                               android:layout_margin="4dp">

<androidx.cardview.widget.CardView
        android:id="@+id/product_img_card"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/product_designation">

    <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/product_img_layout"
            android:layout_width="wrap_content"
            android:layout_height="match_parent">

        <ImageView
                android:id="@+id/product_img"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintDimensionRatio="V,1:1"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:src="@drawable/img_product_sample"/>

    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>

<TextView
        android:id="@+id/product_designation"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:textSize="9sp"
        android:fontFamily="sans-serif-smallcaps"
        android:background="#FF0"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/product_img_card"
        app:layout_constraintStart_toStartOf="@+id/product_img_card"
        app:layout_constraintTop_toBottomOf="@+id/product_img_card"
        tools:text="COUTEAU PLAT 16CM BOIS"
        android:maxLines="1"/>

Мой метод адаптера RecyclerView onBindViewHolder выглядит следующим образом:

  override fun onBindViewHolder(holder: ProductHolder, position: Int) {
    val product = listProducts[holder.layoutPosition]
    holder.designation.text = product.designation
    Log.d(
        "MyProblem",
        "Product.designation=[${product.designation}], textview content=[${holder.designation.text}]"
    )
    val photo = PhotosUtils.getFirstroductPicture(holder.itemView.context, product.codeArticle)
    if (photo != null) {
        val uri = Uri.fromFile(photo)
        GlideApp.with(holder.img)
            .load(uri)
            .error(R.drawable.ic_broken_image_black_24dp)
            .signature { photo.length().toString() }
            .into(holder.img)
    } else {
        GlideApp.with(holder.img)
            .load(R.drawable.ic_broken_image_black_24dp)
            .diskCacheStrategy(DiskCacheStrategy.NONE)
            .skipMemoryCache(true)
            //.signature { System.currentTimeMillis() }
            .into(holder.img)
    }
}

Изображение отображается правильно, значение product.designation и значение textview.text являются правильными (например, «JERRICAN PLASTIQUE 5L»), но иногда в TextView отображается только первая буква. Цвет фона отображает правильную ширину.

На скриншоте ниже я сначала вижу слово целиком об одном продукте, затем прокручиваю в RecyclerView и возвращаюсь к этому продукту, который был правильно отображен, и он снова показывал только первую букву.

enter image description here

Есть идеи, почему это происходит?

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