码农版吴磊 2015-11-03 12:32 采纳率: 0%
浏览 2704

ListView需要用imageloader加载大量网络图片滑动卡顿

需求:类似QQ空间动态功能,每个Item加载头像跟图片还有一些文字。
使用的是UIL来加载图片。
问题:在滑动listview的时候会卡顿,然后加载过的图片再次出现的时候又会重新加载。并不能实现首次下载第二次的时候从内存中加载。PS:每张图片大小在20K以内、网络状态良好。
已尝试方法:优化ImageLoaderConfiguration、设置ListView.setOnScrollListener(new PauseOnScrollListener(imageLoader, true, true));、把UIL更新到最新的1.9.4。
我在网上查了很多,最多方法是给ImageView设置Tag,在加载完成时判断。if(imageUri.equals(holder.ivIcon.getTag())){
holder.ivIcon.setImageBitmap(loadedImage);
}
但是我用的是imageloader.displayImage。
另外,如果给imageview加tag,然后用imageloader.loadimage()来加载图片。在onLoadingComplete()中是不能判断imageview.tag是否等于imageUri的。因为我是在adpter中,用的holder,如果要可以用,就得吧holder定义为final,然而在holder = new ViewHolder();的时候就会让holder移除holder,互相矛盾。
求大神指导。万分感谢!

Adapter的getView()代码如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
IPetUserEvent userevent = (IPetUserEvent) getItem(position);
IPetUserEventDao usereventdao=new IPetUserEventImpl();
IPetUser user=usereventdao.getUserById(userevent.getUserid());
String userName=user.getiName();
String userHeadPic=user.getiImg();
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_userevent,
null);
holder = new ViewHolder();
holder.imgUserHeadPic=(ImageView) convertView.findViewById(R.id.img_item_userevent_head);
holder.imgPic = (ImageView) convertView.findViewById(R.id.iv_item_userevent_eventpic);
holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_item_userevent_eventname);
holder.tvTime = (TextView) convertView.findViewById(R.id.tv_item_userevent_eventtime);
holder.tvUserName=(TextView) convertView.findViewById(R.id.tv_item_userevent_username);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvTitle.setText(userevent.getEventname());
holder.tvTime.setText("活动时间:"+userevent.getEventtime());
holder.tvUserName.setText(userName);
String url= HttpUtil.BASE_URL+"uploadfile/userevent/"+userevent.getEventpic();
String url1= HttpUtil.BASE_URL+"uploadfile/userImage/"+userHeadPic;
imageLoader.displayImage(url1, holder.imgUserHeadPic, options, animateFirstListener);
imageLoader.displayImage(url, holder.imgPic, options, animateFirstListener);//

return convertView;
}

  • 写回答

2条回答 默认 最新

  • yumusam 2015-11-04 01:42
    关注

    顶起,赚个积分先,学习学习

    评论

报告相同问题?

悬赏问题

  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决
  • ¥15 关于华为5g模块mh5000-31接线问题
  • ¥15 keil L6007U报错
  • ¥15 webapi 发布到iis后无法访问
  • ¥15 初学者如何快速上手学习stm32?
  • ¥15 如何自动更换布娃娃图片上的衣服
  • ¥15 心理学eprime编程