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

一、什么是分页加载

在下面的文章中,我们来讲解LitView分页加载的实现。什么是分页加载呢?我们先看几张效果图吧,如下:

                       

                     

效果说明:我们向上滑动ListView的时候,当滑动的最底部, 便会出现正在加载的进度条,当加载完成后,会出现加载后的数据。如此反复,这其实就是ListView的分页加载功能。像这样的工能,实在是太常见了。那么它是怎么实现的呢?

实现原理很简单,本质上,其实就是一个自定义的ListView,加上了底布局(即有进度条的那个布局),然后实现了ListView的OnScrollListener监听而已(即拖动监听)。下面我们就开始一步一步手把手使用模拟的数据来实现这个功能。

二、准备简单的ListView

为了准备模拟的数据,我们先搭建一个简单的普通的ListView出来,因为我们需要这样一个Demo。搭建完成后,我们再将ListView改成我们自定义的ListView,这样子你就能看清楚到底是怎么实现的了。

搭建ListView很简单。首先实现主布局和子项布局。分别如下:

主布局,activity_main.xml,代码如下:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5      android:background="#ccffff">
 6
 7     <ListView
 8         android:id= "@+id/list_view"
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent"
11         android:dividerHeight="5dp"
12         android:divider="#00cc00"></ListView>
13 </LinearLayout>

子项布局 item.xml,需要用到一张图片(就是那个刀刀狗),这里读者自行替换为你自己的图片即可。代码如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="wrap_content"
 4     android:layout_height="wrap_content"
 5     android:orientation="horizontal" >
 6
 7     <ImageView
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:src="@drawable/me"/>
11
12     <TextView
13         android:id="@+id/text_view"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:text="你好,分页加载"
17         android:layout_gravity="center_vertical"
18         android:textSize="20sp"/>
19 </LinearLayout>

好了,布局我们搞定了。下面就开始写MainActivity中的代码吧。代码如下:

 1 package com.fuly.load;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 import android.os.Bundle;
 7 import android.app.Activity;
 8 import android.widget.ListView;
 9
10 public class MainActivity extends Activity {
11
12     private ListView lv;
13     private List<MyData>  mDatas = new ArrayList<MyData>();
14     private MyAdapter mAdapter;
15
16
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20
21         initData();//该方法初始化数据
22         lv = (ListView) findViewById(R.id.list_view);
23         mAdapter = new MyAdapter(this, mDatas);
24         lv.setAdapter(mAdapter);
25
26
27     }
28
29
30     /**
31      * 该方法初始化数据,即提供初始的素材
32      */
33     private void initData() {
34         for(int i = 0;i<12;i++){
35             MyData md = new MyData("你好,我是提前设定的");
36             mDatas.add(md);
37         }
38
39     }
40 }

当然了,少不了我们的实体类(即封装数据的类),MyData.代码如下:

 1 package com.fuly.load;
 2
 3 public class MyData {
 4
 5     private String txt;
 6
 7     public MyData(String txt) {
 8
 9         this.txt = txt;
10     }
11
12     public String getTxt() {
13         return txt;
14     }
15
16     public void setTxt(String txt) {
17         this.txt = txt;
18     }
19 }

然后就是适配器,代码如下:

 1 package com.fuly.load;
 2
 3 import java.util.List;
 4
 5 import android.content.Context;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 import android.widget.ArrayAdapter;
10 import android.widget.TextView;
11
12 public class MyAdapter extends ArrayAdapter {
13
14     private List<MyData>  Datas;
15     private LayoutInflater inflater;
16
17     public MyAdapter(Context context, List data) {
18         super(context, -1, data);
19         inflater = LayoutInflater.from(context);
20         Datas = data;
21     }
22
23
24     public View getView(int position, View convertView, ViewGroup parent) {
25
26         ViewHolder vh = null;
27
28         if(convertView == null){
29
30             convertView = inflater.inflate(R.layout.item, parent, false);
31             vh = new ViewHolder();
32             vh.tv = (TextView) convertView.findViewById(R.id.text_view);
33
34             convertView.setTag(vh);
35         }else{
36             vh = (ViewHolder) convertView.getTag();
37         }
38
39         vh.tv.setText(Datas.get(position).getTxt());
40
41         return convertView;
42     }
43
44     class ViewHolder{
45
46         TextView tv;
47     }
48 }

好了,ListView的Demo我们已经准备好了。下面是运行效果:

我们看此时是没有分页加载的。那么我们还等什么,赶紧进入下一节,实现分页功能。

时间: 2024-10-24 01:38:32

ListView实现分页加载(一)制作Demo的相关文章

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

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

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

1,实现分页是服务器提供分页的功能,每次请求传递一个page参数,代表需要加载那一页数据 2,适配器中得新建一个类似如下的方法 public void appendData(List<MessageItem> list) {//必须是追加 this.list.addAll(list);//不能换成this.list=list,这样只会显示当前页,以前的数据会覆盖 notifyDataSetChanged(); } 3,adpter中提供构造函数和声明,类似如下 private List<

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

ListView的分页加载功能

参考资料: 首先新建一个layout文件,命名为moredata.xml,包含一个Button和一个ProgressBar,xml代码如下: <?xml version="1.0" encoding="utf-8"?>    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"        android:layout_width=&q

OA系统信用盘新增三个极速彩版本Anroid中ListView实现分页加载

1.需要开启权限,AndroidManifest.xml文件中 OA系统信用盘新增三个极速彩版本  下载地址  QQ2952777280 <uses-permission android:name="android.permission.INTERNET"/>   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 2.activity_mai

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

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

Android Demo之旅 ListView底部添加加载更多按钮实现数据分页

在我们的实际项目中,数据应该说是很多的,我们的ListView不可能一下子把数据全部加载进来,我们可以当滚动条滚动到ListView的底部的时候,给一个更多的提示,当我们点击它即加载下一页的数据,相当与我们的分页效果,参考网上的东西,写了一个小小的demo,并总结了一些知识点,功能图如下:    源代码下载地址:http://download.csdn.net/detail/harderxin/7762625 掌握知识点: 1)自定义Adapter,将数据和ListView绑定起来 2)理解La

ListView分页加载数据

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

带表头 固定列可左右上下滑动的可分页加载的ListView

项目描述: 最近做项目,遇到一个问题,就是要求ListView既要有表头,点击表头从能够对特定的列进行排序,并且要求固定第一列,右边的其他列不固定,能够向左滑动的时候,收缩到左侧,向右滑动的时候,显示已经收缩的列,总之就是满足一个需求,一个表里面有很多个列的时候,单个屏幕显示不完所有的列,因此,就做一个可收缩的列表,用于在一个控件里面显示完表中所有的字段. 小的我参考了网上的代码,名字为demoHListView(大家可以到网上搜索下载,或者在我共享的代码中去下载),是用观察者模式来实现的效果,