毕加索加载图像,即使在 recyclerView 的特定位置没有图像 url?
Picasso loads image, even when there is not image url at a specific position in recyclerView?
我的 recyclerview 中有我无法弄清楚的奇怪行为。我在 OnBindViewHolder()
中使用了以下代码
@Override
public void onBindViewHolder(@NonNull ProductAdapter.OurViewHolder viewHolder, int i) {
Product currentItem = adapterData.get(i);
viewHolder.productNamesFragmentItemsBinding.setProductName(currentItem);
if (currentItem.getPhotoUris() != null) {
Picasso.get().load(currentItem.getPhotoUris().get(0))
.into(viewHolder.productNamesFragmentItemsBinding.ivProductImage);
}
if (mViewModel.isCartContainsThisProduct(currentItem.getIdProducts())) {
System.out.println("calling is cart contains");
viewHolder.productNamesFragmentItemsBinding.btnAddToCart.setVisibility(View.GONE);
viewHolder.productNamesFragmentItemsBinding.btnAdded.setVisibility(View.VISIBLE);
viewHolder.productNamesFragmentItemsBinding.btnCancel.setVisibility(View.VISIBLE);
} else {
System.out.println("calling cart not contains");
viewHolder.productNamesFragmentItemsBinding.btnAddToCart.setVisibility(View.VISIBLE);
viewHolder.productNamesFragmentItemsBinding.btnAdded.setVisibility(View.GONE);
viewHolder.productNamesFragmentItemsBinding.btnCancel.setVisibility(View.GONE);
}
}
我的适配器中有五个项目,在位置 2 没有 url,有时它仍然会加载图像,但并非总是如此。
还有一件事我注意到有一个按钮“添加到购物车”,单击它会刷新此位置的项目。因此,如果我在任何位置单击此按钮,比如在位置 5,然后如果我再次单击位置 2(我没有 url),位置 5 的图像将加载到 2.
这根本不是什么奇怪的行为。这就是 RecyclerView
的工作原理,它基本上为下一个项目重复使用相同的 ViewHolder
。
您的代码的问题涵盖 if (currentItem.getPhotoUris() != null)
您错过了 else
部分的情况,即清除图像或设置占位符。
if (!TextUtils.isEmpty(currentItem.getPhotoUris())) {
Picasso.get().load(currentItem.getPhotoUris().get(0))
.into(viewHolder.productNamesFragmentItemsBinding.ivProductImage);
}else{
// you can set a placeholder image here
viewHolder.productNamesFragmentItemsBinding.ivProductImage.setImageResource(0)
}
我的 recyclerview 中有我无法弄清楚的奇怪行为。我在 OnBindViewHolder()
中使用了以下代码 @Override
public void onBindViewHolder(@NonNull ProductAdapter.OurViewHolder viewHolder, int i) {
Product currentItem = adapterData.get(i);
viewHolder.productNamesFragmentItemsBinding.setProductName(currentItem);
if (currentItem.getPhotoUris() != null) {
Picasso.get().load(currentItem.getPhotoUris().get(0))
.into(viewHolder.productNamesFragmentItemsBinding.ivProductImage);
}
if (mViewModel.isCartContainsThisProduct(currentItem.getIdProducts())) {
System.out.println("calling is cart contains");
viewHolder.productNamesFragmentItemsBinding.btnAddToCart.setVisibility(View.GONE);
viewHolder.productNamesFragmentItemsBinding.btnAdded.setVisibility(View.VISIBLE);
viewHolder.productNamesFragmentItemsBinding.btnCancel.setVisibility(View.VISIBLE);
} else {
System.out.println("calling cart not contains");
viewHolder.productNamesFragmentItemsBinding.btnAddToCart.setVisibility(View.VISIBLE);
viewHolder.productNamesFragmentItemsBinding.btnAdded.setVisibility(View.GONE);
viewHolder.productNamesFragmentItemsBinding.btnCancel.setVisibility(View.GONE);
}
}
我的适配器中有五个项目,在位置 2 没有 url,有时它仍然会加载图像,但并非总是如此。
还有一件事我注意到有一个按钮“添加到购物车”,单击它会刷新此位置的项目。因此,如果我在任何位置单击此按钮,比如在位置 5,然后如果我再次单击位置 2(我没有 url),位置 5 的图像将加载到 2.
这根本不是什么奇怪的行为。这就是 RecyclerView
的工作原理,它基本上为下一个项目重复使用相同的 ViewHolder
。
您的代码的问题涵盖 if (currentItem.getPhotoUris() != null)
您错过了 else
部分的情况,即清除图像或设置占位符。
if (!TextUtils.isEmpty(currentItem.getPhotoUris())) {
Picasso.get().load(currentItem.getPhotoUris().get(0))
.into(viewHolder.productNamesFragmentItemsBinding.ivProductImage);
}else{
// you can set a placeholder image here
viewHolder.productNamesFragmentItemsBinding.ivProductImage.setImageResource(0)
}