直接贴吗public class DataService {

public static ArrayList<String> getData1(int page,int maxResult,ArrayList<String> bigData) {

ArrayList<String> data  = new  ArrayList<String>();
for(int i=0;i<maxResult;i++) {
    data.add( bigData.get((page-1)*maxResult+i));
}
return data;
}
 public static ArrayList<String> setData() {
 ArrayList<String> bigData = new ArrayList<String>();
for(int i=0;i<100;i++) {
bigData.add("分页加载数据"+i);
}
return bigData;
}
}public class MainActivity extends Activity {
private ListView lv;
//存放所有数据的集合
private ArrayList<String> data = new ArrayList<String>();
private ArrayList<String> bigData = DataService.setData();

private  ArrayAdapter<String> adapter;
private View footer;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
  footer = getLayoutInflater().inflate(R.layout.footer, null);
lv = (ListView) findViewById(R.id.listview);
lv.setOnScrollListener(new ScrollListener());
//limit 0 20
//data.addAll(DataService.getData(0, 20));
data.addAll(DataService.getData1(1, 20,bigData));
    adapter = new ArrayAdapter<String>(this, R.layout.listview_item,R.id.textview,data);
  
    //添加页脚 放在listview后面  添加以后会调用另外一个方法。否则就调用不包含页脚页眉的适配器
    lv.addFooterView(footer);
     lv.setAdapter(adapter);
     
}

private int number = 20;// 每次获取多少条数据
private int maxpage = 5;//总共多少页
private boolean loadfinish = true;
private final class ScrollListener implements OnScrollListener {
//总共多少条数据,每屏显示的总数据 每屏第一个条目的索引
//状态为1 表示手指在拖动,2停止拖动,但是惯性还在滚动,0 不滚动,为空闲状态。
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub

}
//最后一个条目的索引加上1 = totalitemcount 说明在最后一条
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
//获取当前屏幕最后条目的Id
int lastItemid = lv.getLastVisiblePosition();

 final int loadtotal = totalItemCount;
if(lastItemid+1==totalItemCount) {
if(totalItemCount>0) {
 final int currentpage = totalItemCount%number==0?totalItemCount/number:totalItemCount/number+1;
 final int nextpage = currentpage+1;
if(nextpage<=maxpage&&loadfinish) {
loadfinish = false;
lv.addFooterView(footer);
new Thread(){
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//List<String> result = DataService.getData(loadtotal, number);
List<String> result = DataService.getData1(currentpage, number,bigData);
Log.i("info", loadtotal+"/"+number+"/"+currentpage);
handler.sendMessage(handler.obtainMessage(100, result));
};

}.start();
}

}

}
}

}
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
data.addAll((List<String>)msg.obj);
adapter.notifyDataSetChanged();//通知数据改变,让listview加载
if(lv.getFooterViewsCount()>0) {
lv.removeFooterView(footer);
}
loadfinish = true;


};
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}}
第二页重复加载为什么??