在加载新内容之前滚动垂直显示最后加载的图像后的Android RecyclerView?

时间:2015-10-26 13:57:02

标签: android

我有一个回收视图显示图像列表(从API下载)。当我滚动视图时,它首先显示最后加载的图像,然后加载新内容。我不想再次显示上次加载的内容再次滚动。

@Override
public void onBindViewHolder(ProductItemViewHolder holder, int position) {
    ProductItem item = dataSet.get(position);

    String url = new ApiCalls(holder.photo.getContext()).getBaseUrl() + item.getImages().getImageUrl().get(0);

    //to do


    new ImageViewLoader(taskObserver, holder.photo, url)
            .setDesiredRatio(1.0f)
            .setFallback(R.drawable.img_default_phone)
            .load();

    String percentage = item.getSalePercentage();
    if (percentage != null && !percentage.isEmpty()) {
        holder.badge.setVisibility(View.VISIBLE);
        holder.badge.setText(percentage);
    } else if (item.isNew()) {
        holder.badge.setText(holder.badge.getContext().getString(R.string.product_grid_item_badge_new));
    } else {
        holder.badge.setVisibility(View.GONE);
    }

    holder.productName.setText(item.getProductName());

    String salePrice = item.getSalePrice();
    if (salePrice != null && !salePrice.isEmpty()) {
        holder.price.setVisibility(View.VISIBLE);
        holder.price.setText(formatPrice(item.getCurrency(), item.getPrice()));
        holder.price.setPaintFlags(holder.price.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

        holder.salePrice.setText(formatPrice(item.getCurrency(), salePrice));
        holder.salePrice.setTextColor(holder.salePrice.getContext().getResources()
                .getColor(R.color.red_100));
    } else {
        holder.price.setVisibility(View.INVISIBLE);
        holder.salePrice.setText(formatPrice(item.getCurrency(), item.getPrice()));
        holder.salePrice.setTextColor(holder.salePrice.getContext().getResources()
                .getColor(android.R.color.black));
    }
}

2 个答案:

答案 0 :(得分:1)

我不确定你的意思是什么"它首先显示最后加载的图像,然后加载新内容。",但我有两个猜测:

  1. 由于onBindViewHolder中的参数通常是循环视图持有者,因此当它滚动出视图时,它的状态会保留。这意味着新项目包含图像&除非您在onBindViewHolder中重新设置它们,否则回收物品的文本。

  2. 我们没有看到任何来源的ImageViewLoader,如果为同一个视图持有者提交了新请求,它是否会取消正在进行的请求?您看到的效果可能是旧图像的加载程序仍在尝试下载图像,但稍后在项目已被回收时完成。

答案 1 :(得分:0)

使用recyclerView.scrollToPosition(dataSet.size()-1);