因此,我将MVVM、数据绑定、RecyclerView和Volley ImageLoader与NetworkImageView结合使用。
我基本上试图显示一个提要,其中包含一些包含NetworkImageViews的条目(不是全部)(使用Volley & ImageLoader)。
问题是我的持卡人是回收的,而我的“当前”NetworkImageView正在显示一个先前要求的imageUrl (要求另一张卡)。
我做了一些研究,如果我的保持架被回收,我不得不取消申请。我明白了,我不太明白如何在我当前的代码中这样做,并执行干净的。
PS:,我不想避免我的RecyclerView的回收(那么使用它是没有意义的)。
我感到非常惊讶的是,在默认情况下,ImageLoader/ImageContainer无法正确地处理这个问题。如果有一种简单的、工作的、易于维护的方法来使用另一个库(弗雷斯科、毕加索、幻灯片、UIL、.),为什么不呢?
这是我的适配器:
public final class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.BindingHolder> {
private Context context;
private List<FeedEntry> feedEntries;
public FeedAdapter(Context _context, List<FeedEntry> _feedEntries) {
this.context = _context;
this.feedEntries = _feedEntries;
}
@Override
public BindingHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == FeedEntry.TYPE_IMAGE_ID) {
ItemFeedEntryImageBinding itemFeedEntryImageBinding = DataBindingUtil.inflate(
LayoutInflater.from(parent.getContext()),
R.layout.item_feed_entry_image,
parent,
false);
return new BindingHolder(itemFeedEntryImageBinding);
}
}
@Override
public void onBindViewHolder(BindingHolder holder, int position) {
if (getItemViewType(position) == FeedEntry.TYPE_IMAGE_ID) {
ItemFeedEntryImageBinding feedEntryImageBinding = (ItemFeedEntryImageBinding) holder.binding;
feedEntryImageBinding.setViewModel(new FeedEntryViewModel(this.context, this.feedEntries.get(position)));
}
}
@Override
public int getItemCount() {
return this.feedEntries.size();
}
@Override
public int getItemViewType(int position) {
// Code...
return FeedEntry.TYPE_IMAGE_ID;
}
public static class BindingHolder extends RecyclerView.ViewHolder {
private ViewDataBinding binding;
public BindingHolder(ItemFeedEntryImageBinding binding) {
super(binding.feedEntryCard);
this.binding = binding;
}
}
}这是我的ViewModel的主要内容
@BindingAdapter({"bind:contentImageUrlVolley"})
public static void loadContentImageVolley(NetworkImageView view, String url) {
//view.setImageUrl(null, MyApplication.getInstance().getImageLoader()); Do not solve my issue
view.setImageUrl(url, MyApplication.getInstance().getImageLoader());
}发布于 2015-10-05 12:03:28
我发现使用Fresco而不是Volley/ImageLoader解决了这个问题。
发布于 2019-03-19 06:56:41
与android相比,Imageloader更适合加载网络URL图像。下面我添加了片段。编码愉快!
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.noimage);
requestOptions.error(R.drawable.noimage);
Glide.with(context)
.setDefaultRequestOptions(requestOptions)
.load(eventPojo.getURL()).into(holder.imgThumbnail);https://stackoverflow.com/questions/32913987
复制相似问题