当前位置: 首页 > 知识库问答 >
问题:

毕加索加载图像,即使在recyclerView中的特定位置没有图像url?

余靖
2023-03-14

我在我的回收站视图中有奇怪的行为,我不明白。我在我的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没有网址,仍然它加载图像有时但不总是。

还有一件事,我注意到有一个按钮“添加到购物车”,当点击时,它会刷新这个位置上的物品。所以,如果我在任何位置点击这个按钮,比如在位置5,然后再次点击位置2(我没有url),位置5的图像会在位置2加载。

共有1个答案

丌官飞章
2023-03-14

这一点也不奇怪。这就是RecyclerView的工作原理,它基本上是将相同的ViewHolder重新用于下一个项目。你的代码问题包括if(currentItem.getPhotoUris()!=空)如果您错过了其他部分,即清除图像或设置占位符。

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)
}
 类似资料:
  • 我有一个HorizontalGridView,一切都工作得很好,但是我正在用毕加索加载图像,每当图像加载时,HorizontalGridView就会弹回第一个项目/开始滚动的位置。我还有一个活动上的地图片段,并注意到当地图与之交互时,HorizontalGridView显示相同的行为。下面是适配器代码。请帮助,已经卡在这个上面几天了... }

  • 我正在使用毕加索图书馆。我知道,如果我将图片从URL加载到图像视图中,有一种回调方法。但我不想加载到imageview中。相反,我想将其另存为位图。所以我用了下面的代码 我怎样才能得到一个回调方法,知道我的图像是成功下载使用毕加索? 不要说位图对象的空检查。这会导致错误。

  • 我面临毕加索无法快速加载图像的问题。 有3个显示左、中、右图像。在快进/后退时,对于给定的时间点,选择左、中、右并显示在三个框中。 这是初始化。缓存是100MB以及99MB的 窗口移动的图像数是3000。所以我将图像预加载为 平均图像大小为10KB-320x180,因此达到35MB,小于99MB。 当快速循环工作时,许多图像是(来自)和(来自),但在几个快速循环之后,3个图像冻结或变得非常慢。此时

  • 正如你可以看到的使用链接,毕加索只有3个选项加载一个图像。我的问题是,如果您有一个从API的JSON响应解析的base64字符串,那么如何加载图像?

  • 我正在使用volley向tmdb数据库发出RESTAPI请求,以加载有关电影的信息。回收器视图应显示缩略图图像海报。但它没有显示任何东西。我正在使用毕加索图书馆加载图像。图像链接构造得很好,我已经用log语句检查过了 主要活动。xml 列出项目布局。xml 主要活动 电影数据加载器

  • 我有一个从服务器加载映像的项目。我这样用毕加索, 多谢了。