標籤:
參考部落格:Android ListView分頁載入(服務端+android端)Demo
監聽OnScrollListener事件
class OnListScrollListener implements AbsListView.OnScrollListener{ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { /** * 當分頁操作is_divPage為true時、滑動停止時、且pageNo<=4(這裡因為服務端有4頁資料)時,載入更多資料 */ if (is_divPage && scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE && mPageNo <=4) {// Toast.makeText(getActivity(), "正在擷取更多資料...",Toast.LENGTH_SHORT).show(); new MyTask().execute(EMP_PATH+mPageNo); }else if (mPageNo >4) { /** * 如果pageNo>4則表示,服務端沒有更多的資料可供載入了。 */ Toast.makeText(getActivity(), "沒有更多資料啦...", Toast.LENGTH_SHORT).show(); } } /** * 當:第一個可見的item(firstVisibleItem)+可見的item的個數(visibleItemCount)=所有的item總數的時候, * is_divPage變為TRUE,這個時候才會載入資料。 */ @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { is_divPage = (firstVisibleItem + visibleItemCount == totalItemCount); } }
後台線程請求資料
/** * MyTask繼承線程池AsyncTask用來網路資料請求、json解析、資料更新等操作。 */ class MyTask extends AsyncTask<String, Void, String> { /** * 資料請求前顯示dialog。 */ @Override protected void onPreExecute() { super.onPreExecute(); dialog.show(); } /** * 在doInBackground方法中,做一些諸如網路請求等耗時操作。 */ @Override protected String doInBackground(String... params) { //return RequestData(); getHistoryData(); return "1"; } /** * 在該方法中,主要進行一些資料的處理,更新。 */ @Override protected void onPostExecute(String result) { super.onPostExecute(result); if (result != null) { // 如果擷取的result資料不為空白,那麼對其進行JSON解析。並顯示在手機螢幕上。 mdataList.addAll(mperDataList); mdataAdapter.bindData(mdataList); /** * 當pageNo等於1的時候才會setAdapter,以後不會再設定,直接notifyDataSetChanged,進行資料更新 * ,這樣可避免每次載入更多資料的時候,都會重新回到第一頁。 */// if (mPageNo == 1) {// mListView.setAdapter(mdataAdapter);// } mdataAdapter.notifyDataSetChanged(); mPageNo++; } else if (result == null) { Toast.makeText(getActivity(), "請求資料失敗...", Toast.LENGTH_LONG) .show(); } dialog.dismiss(); } }
Android --ListView分頁