ListView分页加载数据

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

由于源代码使用android
studio的工程格式,而本人用的Eclipse。所以采用了一种笨方法。将java代码和res代码分别拷贝到新的工程里。将错误修复一下。即可使用其Demo。运行效果如图

       

效果如图所示,分别是未加载,第一次加载,第一次加载结束,第二次加载开始。

下面来看一下其代码结构。

其核心主要为PaginListView这个自定义控件。在主程序中,设置了菜单的点击事件。

clearData();
                new CountryAsyncTask(true).execute();

查看CountryAsyncTask的代码,发现:

private class CountryAsyncTask extends SafeAsyncTask<List<String>>

而SafeAstncTask<T>
也是代码中自定义的组件。从注释来看,这个组件与 android.os.AsyncTask

的使用方法有相同之处。

使用时,注册listview的setPagingableListener事件(也就是滑动到底部的事件)。并重写其onLoadMoreItems方法。

public void onLoadMoreItems() {

if(pager < 3) {

new CountryAsyncTask(false).execute();

}else {

listView.onFinishLoading(false, null);
                }

也就是当当前页面小于3个时,执行增加页面操作,并将结果显示。否则的话就停止操作。每次的操作都通过CountryAsyncTask完成。

在CountryAsyncTask内部。

其中主要方法包括构造方法总共5个:

构造方法带参数,是否显示进度条,如图一,

public CountryAsyncTask(boolean showLoading) {

this.showLoading = showLoading;
        }

onPreExecute方法,执行在加载数据之前。

protected void onPreExecute() throws Exception {

super.onPreExecute();

if(showLoading) {

loadingDialog.show();

}
        }

call方法,也就是真正获取数据的方法。如果在项目中使用,获取网络数据必定是在此方法中执行。相当于AsyncTask中的doInBackground方法

public List<String> call() throws Exception {

List<String> result = null;

switch(pager) {

case 0:

result = firstList;

break;

case 1:

result = secondList;

break;

case 2:

result = thirdList;

break;

}

Thread.sleep(3000);

return result;
        }

onSuccess方法,也就是call方法执行成功的时候调用的方法。

protected void onSuccess(List<String> newItems) throws Exception {

super.onSuccess(newItems);

pager++;

if(listView.getAdapter() == null) {

listView.setAdapter(adapter);

}

listView.onFinishLoading(true, newItems);
        }

onFinally方法,相当于异常中Finally。即无论是否执行成功均执行的方法。

protected void onFinally() throws RuntimeException {

super.onFinally();

if(loadingDialog.isShowing()) {

loadingDialog.dismiss();

}
        }

这五个方法依次执行,就将重新加载后的数据显示在ListView当中。

总结:分析这段源码之前一直处于纠结中。因为读PagingListView的源代码,感觉特别吃力。

来自为知笔记(Wiz)

ListView分页加载数据

时间: 2024-08-09 22:01:06

ListView分页加载数据的相关文章

Android中ListView分页加载数据-转

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

Android中ListView分页加载数据

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

ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)

ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)

Android ListView分页加载(服务端+android端)Demo

Android ListView分页加载功能 在实际开发中经常用到,是每个开发者必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了测试. 服务端使用MyEclipse,Android端使用Eclipse. 实现效果图: 服务端一共100条数据,共分四页,每页有25条数据. 源代码: 服务端: 需要导入图中这几个jar包. 在运行Android端代码前,需要开启服务端: 下面先给出服务端的代码: 类EmpDataSource: package com.android

Android-搭建简单服务端+ListView异步加载数据

Android-搭建简单服务端+ListView异步加载数据 2014年5月6日 本篇博文带给大家的是教大家如何在MyEclipse中搭建一个服务端,并通过手机端与其通信,异步加载数据. 笔者使用的是MyEclipse,各位也可以直接用Eclipse创建Java Web项目,谷歌提供的ADT Bundle是不能创建Web项目,读者可以下载Eclipse For JaveEE Developer这个IDE. 下面来介绍如何在MyEclipse创建一个Web项目,并部署到Tomcat当中,关于Tom

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

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

自定义ListView动态加载数据

我们都知道网络取数据是耗时操作,如果我们一次性请求所有数据,假如数据量不多那还可以接受,但是如果数据量特别多,那么带来的后果就是用户的愤怒(用户是很没有耐心的),所以这时候我们就需要动态的加载数据,分批加载我们所需的数据,提升用户体验,先上图.           一般如果一个Activity集成越多的功能,代码量也会随之增多,看起来让人烦,我们可以考虑自定义控件将一些操作集成进去. 自定义ListView 1 package com.example.listviewdynamicloading

Android中ListView动态加载数据

1. 引言: 为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的数据,并渲染到ListView组件中,这样可以极大的改善应用程序的性能和用户体验. 2. 交互: 进入ListView组件,首先预加载N条记录,当用户滑动到最后一条记录显示加载提示信息,并从后台加载N条数据,接着渲染UI界面. 3. 效果图: 4. 程序实现: package com.focus.l

Listview分页加载

//=========主页面============= package com.example.fenye; import java.util.ArrayList;import java.util.List; import com.example.fenye.adapter.MyAdapter;import com.example.fenye.bean.News; import android.os.Bundle;import android.os.Handler;import android.