天天看點

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;
        }