从毕加索加载图像时文本消失 - 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);
}
我有一个加载图像和文本的回收器视图。当图像从 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);
}