我有一个回收视图显示图像列表(从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));
}
}
答案 0 :(得分:1)
我不确定你的意思是什么"它首先显示最后加载的图像,然后加载新内容。",但我有两个猜测:
由于onBindViewHolder中的参数通常是循环视图持有者,因此当它滚动出视图时,它的状态会保留。这意味着新项目包含图像&除非您在onBindViewHolder中重新设置它们,否则回收物品的文本。
我们没有看到任何来源的ImageViewLoader,如果为同一个视图持有者提交了新请求,它是否会取消正在进行的请求?您看到的效果可能是旧图像的加载程序仍在尝试下载图像,但稍后在项目已被回收时完成。
答案 1 :(得分:0)
使用recyclerView.scrollToPosition(dataSet.size()-1);