提高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>
    }




相关文章推荐

【Unity】优化UGUI 滚动条ScrollRect(高效复用)

最近忙于性能优化,深切体会到二八法则真是指导高(tou)效(lan)工作的有力武器。这个礼拜花了几天解决了一个实际问题:UGUI的ScrollRect加载太多物体的时候,第一次弹出界面会非常卡顿,而且...

ListView异步加载图片方法和滚动优化

基本流程: 1.异步任务从指定的网页中获取JSON信息,解析JSON数据,自定义JAVA BEAN对象封装所需要的数据项(标题、摘要、图片URL地址等信息),并将BEAN对象组织成变长数组Array...

ListView异步加载图片方法和滚动优化

基本流程: 1.异步任务从指定的网页中获取JSON信息,解析JSON数据,自定义JAVA BEAN对象封装所需要的数据项(标题、摘要、图片URL地址等信息),并将BEAN对象组织成变长数组ArrayL...

下拉刷新和滚动加载ListView

  • 2015年12月19日 09:46
  • 6.45MB
  • 下载

jquery---组件高效的数字滚动特效

数字滚动插件 /*数字滚动插件的CSS可调整样式*/ .mt-number-animate{ font-family: '微软雅黑'; line-height:40px; height: 40p...

利用ListView自定义高效分页

建立数据库表...............TableAdapter添加sql查询语句:select * from(SELECT Id, Title, Msg, Createdtime,Row_Numb...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:提高ListView滚动的高效优化
举报原因:
原因补充:

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