package cn.itcast.pageload; import java.util.ArrayList; import java.util.List; import cn.itcast.service.DataService; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends Activity { private ListView listView; private List<String> data = new ArrayList<String>(); ArrayAdapter<String> adapter; View footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); footer = getLayoutInflater().inflate(R.layout.footer, null); listView = (ListView) this.findViewById(R.id.listView); listView.setOnScrollListener(new ScrollListener()); //addAll():�������ݼ�;add():���뵥������ data.addAll(DataService.getData(0, 20)); adapter = new ArrayAdapter<String>(this, R.layout.listview_item, R.id.textView, data); //������setAdapter֮ǰ��head��Footer���ú�,����ListView����Ҫʹ��ҳ�׺�ҳ�Ź��� listView.addFooterView(footer); listView.setAdapter(adapter); //������δ��������ʱ�Dz���Ҫ����ҳ�ţ�������������ȥ�� listView.removeFooterView(footer); } private int number = 20;//ÿ�λ�ȡ���������� private int maxpage = 5;//�ܹ��ж���ҳ private boolean loadfinish = true; private final class ScrollListener implements OnScrollListener{ public void onScrollStateChanged(AbsListView view, int scrollState) { Log.i("MainActivity", "onScrollStateChanged(scrollState="+ scrollState+ ")"); } /** * ���ڹ����¼�����һ������ʱ�ͻᴥ�����¼�����������ݷֱ�Ϊ0����ǰ��Ļ�ϵ���Ŀ������ǰҳ���ص���Ŀ���� * @param view ��ǰ������ListView * @param firstVisibleItem ��ǰ��Ļ�ĵ�һ����Ŀ * @param visibleItemCount ��ǰ��Ļ����ʾ������Ŀ * @param totalItemCount ��ǰҳ�����˶�����Ŀ */ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { Log.i("MainActivity", "onScroll(firstVisibleItem="+ firstVisibleItem+ ",visibleItemCount="+ visibleItemCount+ ",totalItemCount="+ totalItemCount+ ")"); final int loadtotal = totalItemCount; int lastItemid = listView.getLastVisiblePosition();//��ȡ��ǰ��Ļ���Item��ID if((lastItemid+1) == totalItemCount){//�ﵽ���ݵ����һ����¼ if(totalItemCount > 0){ //��ǰҳ int currentpage = totalItemCount%number == 0 ? totalItemCount/number : totalItemCount/number+1; int nextpage = currentpage + 1;//��һҳ //loadfinish:ָʾ������û�м�����ɣ���ΪonScroll()һֱ���ڱ�ִ�У�����Ҫ�����������ܽ�����һ�μ��أ� if(nextpage <= maxpage && loadfinish){ loadfinish = false; //��������֮ǰ���ҳ��(����ListView���) listView.addFooterView(footer); //���������Ǻ�ʱ��������Ҫ���߳�����ɣ������������̣߳������޷�����Ӧ new Thread(new Runnable() { public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } /*getData()��������IJ���һ��Ϊ��Ҫ���ص������ʹ��ĸ�λ�ӿ�ʼ ��ȡ��ͨ�������������������*/ List<String> result = DataService.getData(loadtotal, number); handler.sendMessage(handler.obtainMessage(100, result)); } }).start(); } } } } } //�����߳����޷����ؽ�����£�������Ҫ������Ϣ���Ʒ�����Ϣ��������֪ͨ������£�Handler�����߳���ɹ����� Handler handler = new Handler(){ public void handleMessage(Message msg) { data.addAll((List<String>) msg.obj); //����ListView�����Ѿ������ı�(ListView���½�����ʾ) adapter.notifyDataSetChanged(); //�ر�ע�⣺data��List���ͣ������Ѿ������ص�Adapter�У��Ժ���� //����data�м������ݣ�ֱ�ӻ�ʹ��Adapter���ݸ��� //getFooterViewsCount()>0:��ע�Ǽ���FooterView�ϵ� if(listView.getFooterViewsCount() > 0) listView.removeFooterView(footer); loadfinish = true; } }; }