1
package
com.szy.listviewdemo;
2
3
import
java.util.ArrayList;
4
import
java.util.HashMap;
5
6
import
android.app.Activity;
7
import
android.os.Bundle;
8
import
android.os.Handler;
9
import
android.view.View;
10
import
android.view.View.OnClickListener;
11
import
android.widget.AbsListView;
12
import
android.widget.AbsListView.OnScrollListener;
13
import
android.widget.Button;
14
import
android.widget.ListView;
15
import
android.widget.ProgressBar;
16
import
android.widget.SimpleAdapter;
17
import
android.widget.Toast;
18
19
/**
20
* @author coolszy
21
* @date 2012-2-10
22
* @blog http://blog.92coding.com
23
*/
24
public
class
MainActivity
extends
Activity
implements
OnScrollListener
25
{
26
27
private
SimpleAdapter simpleAdapter;
28
private
ListView lv;
29
private
Button btn;
30
private
ProgressBar progressBar;
31
private
ArrayList<HashMap<String, String>> list;
32
33
private
View moreView;
34
private
Handler handler;
35
36
private
int
MaxDateNum;
37
38
private
int
lastVisibleIndex;
39
40
@Override
41
public
void
onCreate(Bundle savedInstanceState)
42
{
43
super
.onCreate(savedInstanceState);
44
setContentView(R.layout.main);
45
MaxDateNum =
22
;
46
lv = (ListView) findViewById(R.id.lv);
47
48
moreView = getLayoutInflater().inflate(R.layout.moredata,
null
);
49
btn = (Button) moreView.findViewById(R.id.bt_load);
50
progressBar = (ProgressBar) moreView.findViewById(R.id.progressBar);
51
handler =
new
Handler();
52
53
list =
new
ArrayList<HashMap<String, String>>();
54
for
(
int
i =
0
; i <
10
; i++)
55
{
56
HashMap<String, String> map =
new
HashMap<String, String>();
57
map.put(
"itemTitle"
,
"第"
+ i +
"行标题"
);
58
map.put(
"itemText"
,
"第"
+ i +
"行内容"
);
59
list.add(map);
60
}
61
62
simpleAdapter =
new
SimpleAdapter(
this
, list, R.layout.item,
new
String[]
63
{
"itemTitle"
,
"itemText"
},
new
int
[]
64
{ R.id.tv_title, R.id.tv_content });
65
66
lv.addFooterView(moreView);
67
lv.setAdapter(simpleAdapter);
68
69
70
lv.setOnScrollListener(
this
);
71
btn.setOnClickListener(
new
OnClickListener()
72
{
73
@Override
74
public
void
onClick(View v)
75
{
76
progressBar.setVisibility(View.VISIBLE);
77
btn.setVisibility(View.GONE);
78
handler.postDelayed(
new
Runnable()
79
{
80
@Override
81
public
void
run()
82
{
83
loadMoreDate();
84
btn.setVisibility(View.VISIBLE);
85
progressBar.setVisibility(View.GONE);
86
simpleAdapter.notifyDataSetChanged();
87
}
88
89
},
2000
);
90
}
91
});
92
93
}
94
95
private
void
loadMoreDate()
96
{
97
int
count = simpleAdapter.getCount();
98
if
(count +
5
< MaxDateNum)
99
{
100
101
for
(
int
i = count; i < count +
5
; i++)
102
{
103
HashMap<String, String> map =
new
HashMap<String, String>();
104
map.put(
"itemTitle"
,
"新增第"
+ i +
"行标题"
);
105
map.put(
"itemText"
,
"新增第"
+ i +
"行内容"
);
106
list.add(map);
107
}
108
}
else
109
{
110
111
for
(
int
i = count; i < MaxDateNum; i++)
112
{
113
HashMap<String, String> map =
new
HashMap<String, String>();
114
map.put(
"itemTitle"
,
"新增第"
+ i +
"行标题"
);
115
map.put(
"itemText"
,
"新增第"
+ i +
"行内容"
);
116
list.add(map);
117
}
118
}
119
120
}
121
122
@Override
123
public
void
onScroll(AbsListView view,
int
firstVisibleItem,
int
visibleItemCount,
int
totalItemCount)
124
{
125
126
lastVisibleIndex = firstVisibleItem + visibleItemCount -
1
;
127
128
if
(totalItemCount == MaxDateNum +
1
)
129
{
130
lv.removeFooterView(moreView);
131
Toast.makeText(
this
,
"数据全部加载完成,没有更多数据!"
, Toast.LENGTH_LONG).show();
132
}
133
}
134
135
@Override
136
public
void
onScrollStateChanged(AbsListView view,
int
scrollState)
137
{
138
139
if
(scrollState == OnScrollListener.SCROLL_STATE_IDLE && lastVisibleIndex == simpleAdapter.getCount())
140
{
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
}
156
}
157
}