首页 > 其他 > 详细

listview实现分页加载数据的注意点

时间:2015-07-20 23:41:36      阅读:407      评论:0      收藏:0      [点我收藏+]

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) {
if (appendlist.size()>0){//必须带上不然会成倍添加,在滑动过程中出现波动的异常,数据被加载了两次
    appendlist.clear();
}

//访问服务器
//解析数据
//返回的数据成功的话,执行
++currentpage;//前置++和后置++等价时,使用前置++,效率更快
//调用appendData()追加数据
}

6,设置listview的滚动监听事件,并

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) {

    }
});

版权声明:本文为博主原创文章,未经博主允许不得转载。

listview实现分页加载数据的注意点

原文:http://blog.csdn.net/banana1006034246/article/details/46972961

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!