首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为不可见物品加载图像(使用ListView -Universal-Image-Loader)

为不可见物品加载图像(使用ListView -Universal-Image-Loader)
EN

Stack Overflow用户
提问于 2014-09-09 16:02:09
回答 2查看 597关注 0票数 0

在我的片段中,我有一个项目的ListView,其中包含一些文本和一个占据整个屏幕宽度的图像。图像是从URL加载的,我使用Android-Universal-Image-Loader来实现。

我正在使用一个自定义适配器(extends BaseAdapter),并以这种方式将其分配给列表:

代码语言:javascript
复制
public class MyAdapter extends BaseAdapter {
    private LayoutInflater inflater;
    private List<Offer> offers;
    private Context context;

    public MyAdapter(Context context, List<Offer> offers) {
        super();
        this.context = context;
        this.inflater = LayoutInflater.from(context);
        this.offers = offers;
    }
    @Override
    public int getCount() {
        return offers.size();
    }
    @Override
    public Object getItem(int position) {
        return offers.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final View view;
        if (convertView == null) {
            view = inflater.inflate(R.layout.offer_list_view, parent, false);
        } else {
            view = convertView;
        }

        final Offer offer = offers.get(position);           
        ImageView image = (ImageView) view.findViewById(R.id.offer_list_item_image);
        MyImageLoader.getInstance(context).displayImage(offer.getImageUrl(), image); //load the image using the universal image loader
        TextView offerTitle = (TextView) view.findViewById(R.id.offer_list_item_title);         
        offerTitle.setText(offer.getTitle());
        return view;
    }
}

通常大约2.5个项目适合屏幕高度。当我向下滚动时,将调用adpater的getView方法,并加载下一个图像。这不是最好的用户行为,我希望每次加载超过2-3个项目。

例如,我希望在开始时不可见的itme/images #3和#4也会被加载,这样当我滚动到它时,它们就已经在那里了。

如何将调用数量扩展到getView,以便也填充当前不可见的项?

EN

回答 2

Stack Overflow用户

发布于 2014-09-09 16:46:40

这就是适配器所做的事情,它只加载可视项目,并一次又一次地回收这些视图。通用图像加载器具有缓存机制,因此一个解决方法是,如果您在设置适配器后加载for循环中的所有图像一次,您的问题将得到解决,,,!.(显然,这些图像只有在它们被获取后才会出现,显然,获取和显示这些图像将花费同样多的时间,但如果它们是从互联网上获取的,下次通用图像加载器从您的本地SD卡加载它们时,这将立即发生,,,确保您在使用通用图像加载器时有写入SD卡的权限。)

票数 0
EN

Stack Overflow用户

发布于 2014-09-09 17:49:11

尝试使用内存和/或磁盘缓存,只有在第一次滚动到一行时才会下载图像。这将使滚动非常流畅。

代码语言:javascript
复制
        DisplayImageOptions displayDefaultOptions = new DisplayImageOptions.Builder()
                .cacheInMemory(true).cacheOnDisc(true).considerExifParams(true)                         
                .build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                .threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory()
                .defaultDisplayImageOptions(displayDefaultOptions)
                .discCacheFileNameGenerator(new Md5FileNameGenerator())             
                .build();
ImageLoader.getInstance().init(config);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25739491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档