第一步,ListView底部加载数据时的布局文件
第三步,MyService类
public class MyService {
public static List
getData(int start){
List
list = new ArrayList
();
for(int i=0; i<20; i++){
list.add("加载的数据是:" + (start + i));
}
return list;
}
}
第四步,MainActivity代码
public class MainActivity extends Activity {
private ListView listView;
private List
list,data;
private View view;
private boolean flag = true;
public static final int SUCCESS = 1;
private MyAdapter adapter;
private int num = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = MyService.getData(0);
listView = (ListView) findViewById(R.id.listView);
view = View.inflate(this, R.layout.foot_layout, null);
listView.addFooterView(view); //必须在设置适配器之前
adapter = new MyAdapter();
listView.setAdapter(adapter);
listView.removeFooterView(view);//如果不删除的话,这个view就一直存在,达不到我们想要的效果
listView.setOnScrollListener(new ListViewListener());
}
Handler handler = new Handler(){
public void handleMessage(Message msg) {
if(msg.arg1 == SUCCESS){
list.addAll(data);
num++;
adapter.notifyDataSetChanged(); //让适配器通知ListView更新数据
flag = true;
listView.removeFooterView(view);
}
}
};
private class ListViewListener implements OnScrollListener{
public void onScroll(AbsListView view1, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if((totalItemCount == (firstVisibleItem + visibleItemCount)) && flag && (num < 5)){
//当前页的末端
flag = false;
listView.addFooterView(view);
new Thread(){
public void run() {
SystemClock.sleep(3000); //模拟从服务器端读取数据的时间
data = MyService.getData(new Random().nextInt(50));
//通知主线程更新UI
Message msg = Message.obtain();
msg.arg1 = SUCCESS;
handler.sendMessage(msg);
}
}.start();
}
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}
private class MyAdapter extends BaseAdapter{
public int getCount() {
return 20*num;
}
public Object getItem(int arg0) {
return null;
}
public long getItemId(int arg0) {
return arg0;
}
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(MainActivity.this);
tv.setPadding(50, 25, 0, 25);
tv.setText(list.get(position));
return tv;
}
}
}