1,实现分页是服务器提供分页的功能,每次请求传递一个page参数,代表需要加载那一页数据
2,适配器中得新建一个类似如下的方法
public void appendData(List<MessageItem> list) {//必须是追加 this.list.addAll(list);//不能换成this.list=list,这样只会显示当前页,以前的数据会覆盖 notifyDataSetChanged(); }3,adpter中提供构造函数和声明,类似如下
private List<MessageItem> list = null;//需要显示的数据,不应该使用new初始化,向上回滚的时候会出问题 public MessageAdapter(List<MessageItem> list) { this.list = list; }4,在activity中需要提供两个List,其中一个为list 来创建adapter,另一个为appendlist 放每次访问的数据,如果使用同一个,在点击第二页或之后的页,程序会崩
private List<MessageItem> list ; //分页的时候得重新创建一个list,不能同时创建一个list还把他传递给adapter。 // adapter的构造函数必须传递list,且在构造函数中使用this.list=list // 否则可能出现,1,点击第二屏后的抱越界2,加载到最后一页卡死 private List<MessageItem> appendlist ;
listView = (ListView) findViewById(R.id.xxx); adapter = new xxxxAdapter(list); listView.setAdapter(adapter);5,访问服务器的代码需放置在一个方法体类,参数有一个page,activity需声明一个变量currentpage=1
private void visitService(int page) {6,设置listview的滚动监听事件,并if (appendlist.size()>0){//必须带上不然会成倍添加,在滑动过程中出现波动的异常,数据被加载了两次 appendlist.clear(); }
//访问服务器
//解析数据
//返回的数据成功的话,执行
++currentpage;//前置++和后置++等价时,使用前置++,效率更快
//调用appendData()追加数据
}
listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {//滚动停止 if (view.getLastVisiblePosition() == view.getCount() - 1) { visitService(currentPage);//调用加载第二页 } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/banana1006034246/article/details/46972961