在我的片段中,我有一个项目的ListView,其中包含一些文本和一个占据整个屏幕宽度的图像。图像是从URL加载的,我使用Android-Universal-Image-Loader来实现。
我正在使用一个自定义适配器(extends BaseAdapter),并以这种方式将其分配给列表:
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,以便也填充当前不可见的项?
发布于 2014-09-09 16:46:40
这就是适配器所做的事情,它只加载可视项目,并一次又一次地回收这些视图。通用图像加载器具有缓存机制,因此一个解决方法是,如果您在设置适配器后加载for循环中的所有图像一次,您的问题将得到解决,,,!.(显然,这些图像只有在它们被获取后才会出现,显然,获取和显示这些图像将花费同样多的时间,但如果它们是从互联网上获取的,下次通用图像加载器从您的本地SD卡加载它们时,这将立即发生,,,确保您在使用通用图像加载器时有写入SD卡的权限。)
发布于 2014-09-09 17:49:11
尝试使用内存和/或磁盘缓存,只有在第一次滚动到一行时才会下载图像。这将使滚动非常流畅。
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);https://stackoverflow.com/questions/25739491
复制相似问题