Android ListView分页加载数据Demo
来源:互联网 发布:淘宝子账号怎么注册 编辑:程序博客网 时间:2024/05/03 06:51
一个简单的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
}
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
}
- Android ListView分页加载数据Demo
- android ListView 数据分页加载
- Android ListView分页加载数据
- Android ListView分页加载数据
- Android Demo之旅 ListView底部添加加载更多按钮实现数据分页
- Android ListView分页加载(服务端+android端)Demo
- Android中ListView分页加载数据
- Android中ListView分页加载数据
- Android+Listview+分页+动态加载网络数据
- android中listview分页加载数据
- Android中ListView分页加载数据
- Android中ListView分页加载数据
- Android中ListView分页加载数据
- android中listview分页加载数据
- Android中ListView分页加载数据
- Android中ListView分页加载数据
- Android中ListView分页加载数据
- Android中ListView分页加载数据
- Hard limits for "maximum open file descriptors"
- python手记(12)
- android自定义实现抽屉SlidingDrawer的功能
- 谷歌面试题:给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字) 。如何才能从这个无穷尽的流中随机的选取 1000 个关键字?
- uva10271 - Chopsticks(巧妙动归)
- Android ListView分页加载数据Demo
- eclipse中maven项目有一个红叉
- 树和森林的孩子兄弟结构
- C# 关于判断字符串为空的一些方法
- unity3d 使用LitJson解析 JSON格式数据
- apache下ssi的支持
- mmap详解
- Android 网络通讯、通信
- Codeforces Beta Round #95 (Div. 2)