Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android數據分批加載-滑動到底部自動加載列表

Android數據分批加載-滑動到底部自動加載列表

編輯:關於Android編程

Android數據分批加載-滑動到底部自動加載列表


2014年5月9日

本博文介紹如何進行數據分批加載,在應用開發當中會經常使用到ListView,點擊更多加載數據是我們經常簡單,為了提供用戶體驗,當用戶將列表滾動到底部自動加載數據,這樣的形式用得比較多。

下面給大家提供的例子是,每次模擬20條數據,滑動到底部時再請求20條數據直到請求到限定頁數為止

具體代碼實現:

/08_Datapageload/src/com/wwj/datapageload/MainActivity.java

package com.wwj.datapageload;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {
	private ListView listView;
	private List data = new ArrayList();
	ArrayAdapter adapter;
	View footer;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		footer = getLayoutInflater().inflate(R.layout.footer, null);

		listView = (ListView) findViewById(R.id.listView);
		listView.setOnScrollListener(new ScrollListener());

		// 模擬數據
		data.addAll(DataService.getData(0, 20));
		adapter = new ArrayAdapter(this, R.layout.listview_item,
				R.id.textView, data);
		listView.addFooterView(footer);// 添加頁腳(放在ListView最後)
		listView.setAdapter(adapter);
		listView.removeFooterView(footer);
	}

	private int number = 20; // 每次獲取多少條數據
	private int maxpage = 5; // 總共有多少頁
	private boolean loadfinish = true; // 指示數據是否加載完成

	private final class ScrollListener implements OnScrollListener {

		@Override
		public void onScroll(AbsListView view, int firstVisibleItem,
				int visibleItemCount, int totalItemCount) {
			Log.i("MainActivity", "onScroll(firstVisibleItem="
					+ firstVisibleItem + ",visibleItemCount="
					+ visibleItemCount + ",totalItemCount=" + totalItemCount
					+ ")");

			final int loadtotal = totalItemCount;
			int lastItemid = listView.getLastVisiblePosition(); // 獲取當前屏幕最後Item的ID
			if ((lastItemid + 1) == totalItemCount) { // 達到數據的最後一條記錄
				if (totalItemCount > 0) {
					// 當前頁
					int currentpage = totalItemCount % number == 0 ? totalItemCount
							/ number
							: totalItemCount / number + 1;
					int nextpage = currentpage + 1; // 下一頁
					if (nextpage <= maxpage && loadfinish) {
						loadfinish = false;
						listView.addFooterView(footer);

						// 開一個線程加載數據
						new Thread(new Runnable() {

							@Override
							public void run() {
								try {
									Thread.sleep(3000);
								} catch (InterruptedException e) {
									e.printStackTrace();
								}
								List result = DataService.getData(
										loadtotal, number);
								// 發送消息
								handler.sendMessage(handler.obtainMessage(100,
										data));
							}
						}).start();
					}
				}
			}

		}

		@Override
		public void onScrollStateChanged(AbsListView view, int scrollState) {
			Log.i("MainActivity", "onScrollStateChanged(scrollState="
					+ scrollState + ")");
		}

	}

	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			data.addAll((List) msg.obj);
			// 告訴ListView數據已經發生改變,要求ListView更新界面顯示
			adapter.notifyDataSetChanged();
			if (listView.getFooterViewsCount() > 0) { // 如果有底部視圖
				listView.removeFooterView(footer);
			}
			loadfinish = true; // 加載完成
		};
	};

}

/08_Datapageload/src/com/wwj/datapageload/DataService.java

package com.wwj.datapageload;

import java.util.ArrayList;
import java.util.List;

public class DataService {
	public static List getData(int offset, int maxResult) { // 分頁limit
																	// 0,20
		List data = new ArrayList();
		for (int i = 0; i < 20; i++) {
			data.add("ListView數據的分批加載" + i);
		}
		return data;

	}
}


效果圖如下:


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved