gpt4 book ai didi

android - RecyclerView 中的 NetworkImageView 因回收而导致显示问题

转载 作者:太空狗 更新时间:2023-10-29 14:53:59 26 4
gpt4 key购买 nike

因此,我将 MVVM、数据绑定(bind)、RecyclerView 和 Volley ImageLoader 与 NetworkImageView 结合使用。

我主要是尝试显示包含 NetworkImageViews(使用 Volley 和 ImageLoader)的一些项目(不是全部)的提要。

问题是我的 holder 被回收了,我的“当前”NetworkImageView 显示的是之前询问过的 imageUrl(要求另一张卡片)。

我做了一些研究,如果我的支架被回收,我必须取消请求。我明白了,我真的不知道如何在我当前的代码中做到这一点并做到这一点 CLEAN

PS:我不想避免回收我的 RecyclerView(那时没有必要使用它)。

我真的很惊讶,默认情况下 ImageLoader/ImageContainer 无法正确处理这个问题。如果有一种简单、有效且易于维护的方法可以使用其他库(Fresco、Picasso、Glide、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());
}

最佳答案

我发现使用 Fresco 而不是 Volley/ImageLoader 可以解决问题。

关于android - RecyclerView 中的 NetworkImageView 因回收而导致显示问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32913987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com