一个简单的Android分页加载数据的实例,实例中加载方式是滑动到底部自动加载下页数据,现在加载方式可以是点击拖拽一个自己定义的控件。
下面是一个主要的Activity代码:
01 public class MainActivity extends Activity {
02private ListView listview;
03private View footer;
04private List<String> data;
05private ArrayAdapter<String> adapter;
06
07@Override
08public void onCreate(Bundle savedInstanceState) {
09super.onCreate(savedInstanceState);
10setContentView(R.layout.main);
11listview = (ListView) findViewById(R.id.listview);
12// 给adapter添加数据
13data = new DataService().getData();
14adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tv_name, data);
15// 必须在setAdapter之前把head和Footer设置好
16footer = getLayoutInflater().inflate(R.layout.footer, null);
17listview.addFooterView(footer);
18
19// listview设置adpater
20listview.setAdapter(adapter);
21listview.removeFooterView(footer);
22// 以上就可以显示ListView上的数据,可是不能分页显示,没有给LIstView添加滚动事件,
23// 下面我们来给ListVIew添加滚动事件,从而达到自动刷新ListView分页加载数据的功能
24listview.setOnScrollListener(new MyOnScrollListener());
25}
26
27public final class MyOnScrollListener implements OnScrollListener {
28protected static final int GET_DATA_SUCCESS = 0;
29private int pageCount = 20;
30private int pageSize = 5;
31// 是否加载完成
32Boolean finish = true;
33private Handler mHandler = new Handler() {
34public void handleMessage(Message msg) {
35msg.what = GET_DATA_SUCCESS;
36List<String> result = (List<String>) msg.obj;
37data.addAll(result);
38finish = true;
39if (listview.getFooterViewsCount() > 0) {
40listview.removeFooterView(footer);
41}
42// 通知适配器更新数据
43adapter.notifyDataSetChanged();
44};
45};
46
47@Override
48public void onScrollStateChanged(AbsListView view, int scrollState) {
49
50}
51
52@Override
53public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
54// 计算当前加载上来的全部item数目
55int totalItem = firstVisibleItem + visibleItemCount;
56// 计算当前页
57int currenPage = totalItemCount / pageSize;
58// 计算下一页的数值
59int nextPage = currenPage + 1;
60// 当 当前加载过的item总数目等于总显示过的Item数目的时候可以去加载
61if (totalItem == totalItemCount) {
62if (nextPage < pageCount && finish) {
63finish = false;
64listview.addFooterView(footer);
65// 开始加载数据
66new Thread() {
67public void run() {
68SystemClock.sleep(3000);
69List<String> result = new DataService().getData();
70Message msg = new Message();
71msg.what = GET_DATA_SUCCESS;
72msg.obj = result;
73mHandler.sendMessage(msg);
74}www.2cto.com
75
76}.start();
77}
78}
79}
80}
81 }
如下是提供数据的service,
01 public class DataService {
02/*
03* 每次生成一个20个元素的List列表返回
04*/
05public List<String> getData() {
06List<String> data = new ArrayList<String>();
07for (int i = 0; i < 20; i++) {
08data.add("当前item的id是:" + i);
09}
10return data;
11}
12 }
作者:Simpleness