毕加索加载图像,即使在 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)
}