天天看点

Android控件 – ListView的使用(二)– addHeaderView、addFooterView的使用与滑动优化addHeaderView 和 addFooterView的使用ListView滚动时卡顿优化

addHeaderView 和 addFooterView的使用

ListView除了可以使用Adapter绑定数据外,还可以通过addHeaderView()和addFooterView()方法给ListView的上方或下方添加其他View,他们可以多次添加。例如addHeaderView()最先添加的会在最上方,然后按先后顺序由上到下罗列,此时ListView的position=0的位置对应的是第一次添加的headerView

注意:

         1、addHeaderView()和addFooterView()方法都必须在setAdapter()之前调用,否则会报错

         2、如是不调用setAdapter()方法,headView和footerView也不会显示

ListView滚动时卡顿优化

ListView卡顿的解决其实很简单,就是不要在主线程中执行太多的耗时操作即可提高滑动的流畅度从而不卡顿:

1、不要在getView中执行耗时操作,若必要可通过异步的方式来处理。

2、控制异步任务的执行频率,例如在频繁上下滑动ListView时,会产生一系列异步任务,这些任务会造成线程池的拥堵和UI更新操作。所以可以在列表滑动停止后才进行这些任务。

具体方法:

对ListView设置滑动监听setOnScrollListener(),然后在onScrollStateChanged方法中判断是否滑动停止,如果停止后才通知Adapter更新,核心代码如下:

myListView.setAdapter(myAdapter);
        myListView.setOnScrollListener(new AbsListView.OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                // 滑动停止后才加载图片
                if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                    mIsGridViewIdle = true;
                    mImageAdapter.notifyDataSetChanged();
                } else {
                    mIsGridViewIdle = false;
                }
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

            }
        });
           

……

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ……
            if (mIsGridViewIdle) {
                // TODO...
            }
            return convertView;
        }