提高ListView滚动的高效优化

原创 2015年11月19日 15:26:05

ListView伴随着网络加载,怎么能提高效率?

拖动时通常加载数据,滑动的同时去加载,有时候会让设备出现卡顿


以网络加载图片为例

  解决方案:

1. ListView 滑动停止后才加载可见项

2. ListView滑动时,取消所有加载项


实现:

修改自定义适配器

1. 实现接口
public class NewsAdapter extends BaseAdapter implements AbsListView.OnScrollListener{


 
2. 实现两个方法
@Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        if (scrollState == SCROLL_STATE_IDLE){
            //加载可见项
            mImageLoader.loadImages(mStart, mEnd);
        }else {
            //停止任务
            mImageLoader.cancelAllTasks();
        }
    }

将加载图片的控制权从getView到onScrollStateChanged
      滚动时候停止加载,停止时加载

3. 注册接口
//注册接口,给传入的ListView绑定一个监听事件
listView.setOnScrollListener(this);

4.实现之后还有一个问题,就是首次进入时不会加载,可以增加一个flag去判断是否为第一个启动
   
a.添加一个变量  
private boolean mFirstIn;
b.初始化的时候赋值(红色标注)
 public NewsAdapter(Context context, List<NewsBean> data, ListView listView){
        mList = data;
        mInflater = LayoutInflater.from(context);
        mImageLoader = new ImageLoader(listView);
        URLS = new String[data.size()];
        //保存当前我们获取到的所有的图片的Url
        for (int i=0; i<data.size(); i++){
            URLS[i] = data.get(i).newsIconUrl;
        }
        <span style="color:#ff0000;">mFirstIn = true;</span>
        //注册接口,给传入的ListView绑定一个监听事件
        listView.setOnScrollListener(this);
    }

c.在onScroll进行判断  (在每次启动时,并不会调用onScrollStateChanged方法 ,
而onScroll方法都会首先调用,所以可以在onScroll方法进行判断)
 @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        mStart = firstVisibleItem;
        mEnd = firstVisibleItem + visibleItemCount;

        <span style="color:#ff0000;">if (mFirstIn && visibleItemCount>0){
            mImageLoader.loadImages(mStart, mEnd);
            mFirstIn = false;
        }</span>
    }




Android性能优化之提高ListView性能的技巧

ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能。...
  • nugongahou110
  • nugongahou110
  • 2015年07月29日 15:13
  • 13925

HttpClient优化指南

简介 默认情况下HttpClient配置为了提供最大的可靠性和标准遵从性而非性能。有多个配置选项和优化技术能够显著提高HttpClient的性能。此指南列出了实现HttpClient的性能最大化...
  • qq_29158381
  • qq_29158381
  • 2016年02月26日 10:05
  • 1337

Android 获取ListView滚动距离方法

今天想做个导航栏渐变的效果,原来这种效果是通过监听ScrollView的滚动距离实现的。由于首页图片较多,而且里面还嵌套了ListView,大家都知道ListView嵌套在ScrollView中是需要...
  • c19344881x
  • c19344881x
  • 2016年01月19日 17:55
  • 10085

ListView的四种优化方式

优化方式一: 第一种优化就是重用convertView,这也是最简单的一种优化方式,就是在Adapter类的getView方法中通过判断convertView是否为null,是的话就需要在创建一个...
  • Xk632172748
  • Xk632172748
  • 2016年07月18日 15:35
  • 8564

高性能滚动 scroll 及页面渲染优化

最近在研究页面渲染及web动画的性能问题,以及拜读 《CSS SECRET》 (CSS揭秘)这本大作。 本文主要想谈谈页面优化之 滚动优化 。 主要内容包括了为何需要优化滚动事件,滚动与页...
  • Lankecms
  • Lankecms
  • 2016年05月24日 22:11
  • 613

ListView 如何提高其效率

1、ListView 如何提高其效率? **当 convertView 为空时,用 setTag()方法为每个 View 绑定一个存放控件的 ViewHolder 对象 convertView不为...
  • wufagang
  • wufagang
  • 2016年09月27日 10:30
  • 635

ListView乱谈之ListView的滚动原理

简单的分析了ListView的滚动原理
  • chunqiuwei
  • chunqiuwei
  • 2015年09月26日 22:30
  • 2793

Android开发之ListView 优化之缓存优化

通过平时对ListView的使用,目前我把ListView的优化分为以下几个方面: 1.缓存优化 2.数据优化 3.其他方面优化 0.未优化简单代码 public class MainActivi...
  • u013278940
  • u013278940
  • 2016年10月25日 16:51
  • 737

监听ListView的滚动事件

实现一个需求,在滑动ListView到底部时,加载新的List实现ListView的动态加载功能;...
  • jw20082009jw
  • jw20082009jw
  • 2015年06月13日 20:59
  • 1194

Java如果提高反射效率

1.什么是反射? 通俗的来说就是,通过java的类名创建Class对象,然后我们可以通过class对象的newInstance的方法获得我们所需要的对象,而且这个过程是在程序运行中创建的,我们可以称...
  • Barnetthe
  • Barnetthe
  • 2016年01月20日 15:29
  • 1141
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:提高ListView滚动的高效优化
举报原因:
原因补充:

(最多只允许输入30个字)