ListView實現動態載入
阿新 • • 發佈:2019-02-02
覺得這個功能挺實用的,記錄下來,方便以後檢視。
初始時,先將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。