从毕加索加载图像时文本消失 - Android

Text dissapears when image is loaded from picasso - Android

我有一个加载图像和文本的回收器视图。当图像从 url 加载时,虽然 picasso 其他元素是回收器视图,但它们的文本会丢失。丢失文本的元素不会从 www 而是从 android 可绘制文件夹加载图像。所有图像的大小都相同,我用相同的图像进行了尝试,但它仍然发生。如果您能提供任何见解,因为我不知道该做什么或尝试什么。

这是我的问题的 gif:https://giphy.com/gifs/hR5w7IrCZ14T9M8o7A

---编辑---- 尝试了 Radesh 的回答没有用。尝试使用 glide 而不是 picasso(似乎 glide 更快)。问题似乎是回收商更新的方式。
我的 onBindViewHolder

@Override
public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, int i) {
    myViewHolder.textItem.setText(categoryItem.get(i).getEng_name());
    if (categoryItem.get(i).getDefault_image().equals("empty") || categoryItem.get(i).getDefault_image().length() == 0) {
        Picasso.get().load(R.drawable.no_image).into(myViewHolder.image);
    } else {
        Glide.with(myViewHolder.context).load("https://i.ibb.co/wwT602t/lake-plastira.jpg").into(myViewHolder.image);
        //Picasso.get().load("https://i.ibb.co/wwT602t/lake-plastira.jpg").placeholder(R.drawable.loading_image).error(R.drawable.failed_to_load).into(myViewHolder.image);
    }
}


我的 xml 已加载的项目

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardview_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground"
app:cardBackgroundColor="?attr/color4">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ImageView
        android:id="@+id/item_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:src="@drawable/no_image"
        android:scaleType="fitStart" />
    <TextView
        android:id="@+id/item_name"
        android:textColor="?attr/color6"
        android:textSize="20sp"
        android:gravity="center"
        android:layout_gravity="bottom"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
</android.support.v7.widget.CardView>


我的recyclerView代码

    recyclerView = (RecyclerView) findViewById(R.id.categories_rec);
    recyclerView.setHasFixedSize(true);
    layoutManager = new GridLayoutManager(this, 2);
    recyclerView.setLayoutManager(layoutManager);
    mAdapter = new SpecificCategoryAdapter(categoryItem);
    recyclerView.setAdapter(mAdapter);
    mAdapter.notifyDataSetChanged();

更改此代码

   <TextView
        android:id="@+id/item_name"
        android:textColor="?attr/color6"
        android:textSize="20sp"
        android:gravity="center"
        android:layout_gravity="bottom"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

对此

  <TextView
        android:id="@+id/item_name"
        android:textColor="?attr/color6"
        android:textSize="20sp"
        android:gravity="center"
        android:singleLine="true"
        android:maxLines="1"
        android:layout_gravity="bottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

所以我找到了一个解决方案我使用了一个runnable,问题就解决了。如果您有任何其他想法,请 post 提出来。我相信发生这种行为是因为该函数从未结束,因为它正在等待图像。

 myViewHolder.textItem.setText(categoryItem.get(i).getEng_name());
  if (categoryItem.get(i).getDefault_image().equals("empty") || categoryItem.get(i).getDefault_image().length() == 0) {
      Picasso.get().load(R.drawable.no_image).into(myViewHolder.image);       
  } else {
      final Handler handler = new Handler();
      final Runnable r = new Runnable() {
          public void run() {
              Glide.with(myViewHolder.context).load("https://i.ibb.co/wwT602t/lake-plastira.jpg").into(myViewHolder.image);
          }
      };
      handler.postDelayed(r, 1000);
  }