1. 程式人生 > >ListView實現動態載入

ListView實現動態載入

覺得這個功能挺實用的,記錄下來,方便以後檢視。

初始時,先將footerview新增到listview中,如下:

 footView = LayoutInflater.from(this).inflate(R.layout.list_view_foot_loading_item, null);
 footView.setVisibility(View.GONE);
 mListView.addFooterView(footView);
實現動態載入,最主要的就是監聽listview的滑動,具體實現如下:
</pre><p><pre name="code" class="java"> mListView.setOnScrollListener(new OnScrollListener()
        {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState)
            {
                if ((((lastItemIndex == messageAdapter.getCount() - 1) && mListView.getFooterViewsCount() == 0)
                        || (((lastItemIndex == messageAdapter.getCount()) && mListView.getFooterViewsCount() != 0))) && scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) 
                {
                    if (pageIndex * PAGE_SIZE >= totalCount)
                    {
                        showToast("沒有更多結果了");
                        mListView.removeFooterView(footView);
                        return;
                    }
                    footView.setVisibility(View.VISIBLE);
                    messageLogic.querySystemMessages(pageIndex * PAGE_SIZE, PAGE_SIZE);
                }
            }
            
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
                    int totalItemCount)
            {
                lastItemIndex = firstVisibleItem + visibleItemCount - 1;
            }
        });

   

  其中,lastItemIndex表示的是底部最後可見的item項的下標,從0開始;pageIndex表示的是當前的頁數;PAGE_SIZE表示每頁載入的數量;totalCount表示資料庫中總共的資料數量,從伺服器中獲取。messageLogic.querySystemMessages(pageIndex * PAGE_SIZE, PAGE_SIZE)方法用於向伺服器中請求相應的資料。當滑動到最後時,若資料庫中還有資料,則顯示載入的滾動條並載入資料,否則,刪除footerview。