Android ListView分页加载数据Demo

一个简单的Android分页加载数据的实例,实例中加载方式是滑动到底部自动加载下页数据,现在加载方式可以是点击拖拽一个自己定义的控件。

    下面是一个主要的Activity代码:

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

如下是提供数据的service,

01 public class DataService {
02     /*
03      * 每次生成一个20个元素的List列表返回
04      */
05     public List<String> getData() {
06         List<String> data = new ArrayList<String>();
07         for (int i = 0; i < 20; i++) {
08             data.add("当前item的id是:" + i);
09         }
10         return data;
11     }
12 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值