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

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

    }
});

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

时间: 2024-12-28 09:51:06

listview实现分页加载数据的注意点的相关文章

ListView分页加载数据

在android软件开发中,ListView是一种经常被用到的组件.当需要用到列表显示的时候,通常都会用到.而使用的过程中也可能出现一些问题.比如,一次性加载过多的Item对于手机有限的内存来说,是一种负担.于是就有了分页加载的技术,一般的说,分页的使用方式有两种,一是在滑动到底部的时候,自动加载下一部分的内容.另一种则是在底部添加一个类似按钮的控件,点击后加载内容.这里介绍的是第一种.同样的,代码来自github,网址是:https://github.com/nicolasjafelle/Pa

android UI进阶之实现listview的分页加载

 分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了.通过分页分次加载数据,用户看多少就去加载多少. 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载.另一种是当用户滑动到底部时自动加载.今天我就和大家分享一下这个功能的实现. 首先,

ListView实现分页加载(一)制作Demo

一.什么是分页加载 在下面的文章中,我们来讲解LitView分页加载的实现.什么是分页加载呢?我们先看几张效果图吧,如下:                                               效果说明:我们向上滑动ListView的时候,当滑动的最底部, 便会出现正在加载的进度条,当加载完成后,会出现加载后的数据.如此反复,这其实就是ListView的分页加载功能.像这样的工能,实在是太常见了.那么它是怎么实现的呢? 实现原理很简单,本质上,其实就是一个自定义的ListV

XE7 &amp; FMX 那些年我们一起上过的控件:ListView 之 (2) 加载数据时如何显示进度条

本文介绍一下ListView下如何加载数据.及使用进度条反馈当前进度给用户. 注意: 原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/weii/p/4190694.html 我们先来看看效果图: 进度条需要这样用的,以下为本文参考代码: procedure TForm1.Button2Click(Sender: TObject); begin TThread.CreateAnonymousThread( procedure() v

XE7 &amp; FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式

本文介绍一下ListView下如何加载数据.及使用进度条反馈当前进度给用户. 注意: 原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/weii/p/4190719.html 我们先来看看效果图: FMX异常强大,我们可以发挥想像,自定义进度样式,以下为本文参考代码: procedure TForm1.Button3Click(Sender: TObject); var pe: TPie; //扇形作进度 rc: TRoundRec

Android中ListView分页加载数据-转

Android应用开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页的形式来展示数据,个人觉得这样会有更好的用户体验.因此,很多应用都是采用分批次加载的形式来获取用户所需的数据.例如:微博客户端可能会在用户滑动至列表底端时自动加载下一页数据,也可能在底部放置一个"查看更多"按钮,用户点击后,加载下一页数据. 下面通过一个Demo来展示ListView功能如何实现:该Demo通过在ListVie

Android开发之ListView利用OnScrollListener实现分页加载数据

上篇博文和大家分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了.通过分页分次加载数据,用户看多少就去加载多少. 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载.另一种是当用户滑动到底部时自动加载.今天我就和大家分享一下这个功能的实现.

Android中ListView分页加载数据

熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容.通常来说,一个应用在展现大量数据时,不会将全部的可用数据都呈现给用户,因为这不管对于服务端还是客户端来说都是不小的压力,因此,很多应用都是采用分批次加载的形式来获取用户所需的数据.比如:微博客户端可能会在用户滑动至列表底端时自动加载下一页数据,也可能在底部放置一个“加载更多”按钮,用户点击后,加载

android的ListView的分页加载

main6.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent