在我的应用程序中,我有一个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中滚动并返回到正确显示的该产品,它只再次显示了第一个字母。
为什么会这样?