一、什么是分页加载

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

                       

                     

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

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

二、准备简单的ListView

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

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

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

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ccffff"> <ListView
android:id= "@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerHeight="5dp"
android:divider="#00cc00"></ListView>
</LinearLayout>

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

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" > <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/me"/> <TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="你好,分页加载"
android:layout_gravity="center_vertical"
android:textSize="20sp"/>
</LinearLayout>

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

 package com.fuly.load;

 import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.app.Activity;
import android.widget.ListView; public class MainActivity extends Activity { private ListView lv;
private List<MyData> mDatas = new ArrayList<MyData>();
private MyAdapter mAdapter; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initData();//该方法初始化数据
lv = (ListView) findViewById(R.id.list_view);
mAdapter = new MyAdapter(this, mDatas);
lv.setAdapter(mAdapter); } /**
* 该方法初始化数据,即提供初始的素材
*/
private void initData() {
for(int i = 0;i<12;i++){
MyData md = new MyData("你好,我是提前设定的");
mDatas.add(md);
} }
}

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

 package com.fuly.load;

 public class MyData {

     private String txt;

     public MyData(String txt) {

         this.txt = txt;
} public String getTxt() {
return txt;
} public void setTxt(String txt) {
this.txt = txt;
}
}

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

 package com.fuly.load;

 import java.util.List;

 import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView; public class MyAdapter extends ArrayAdapter { private List<MyData> Datas;
private LayoutInflater inflater; public MyAdapter(Context context, List data) {
super(context, -1, data);
inflater = LayoutInflater.from(context);
Datas = data;
} public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vh = null; if(convertView == null){ convertView = inflater.inflate(R.layout.item, parent, false);
vh = new ViewHolder();
vh.tv = (TextView) convertView.findViewById(R.id.text_view); convertView.setTag(vh);
}else{
vh = (ViewHolder) convertView.getTag();
} vh.tv.setText(Datas.get(position).getTxt()); return convertView;
} class ViewHolder{ TextView tv;
}
}

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

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

最新文章

  1. BPM公文管理解决方案分享
  2. Rectangle Area
  3. fenxi
  4. Javascript之旅——第十一站:原型也不好理解?
  5. https://www.zhihu.com/question/52020960#answer-47024535
  6. android bluetooth蓝牙移植
  7. Nginx源码安装及调优配置
  8. AE-模板替换-&gt;愉快今日--视频样片!
  9. Keil C51 与 ARM 并存方法
  10. [Django实战] 第8篇 - 分页列表
  11. js数组基础整理
  12. 用sudo命令无法读取环境变量
  13. intellij idea在project下同时打开多个工程(maven工程)
  14. 手机连得上WIFI,电脑连不上的情况
  15. 个人经验~mysql故障处理思路
  16. eKingCloud 从 OpenStack 到 OpenInfra 演进之路
  17. 为什么研发团队不适合量化KPI的绩效考核?
  18. MySql(十九):基础——自定义存储过程和函数
  19. hdu1542 Atlantis (线段树+矩阵面积并+离散化)
  20. centos7下mysqldump+crontab自动备份数据库

热门文章

  1. 学习笔记之--认识Xcode中的重要成员:lldb调试器
  2. mysql 远程链接问题
  3. angular-ui-router动态加载模块
  4. Swift强制解析
  5. Java - 谨慎覆盖equals
  6. 一:SpringIOC&amp;DI
  7. java类与对象基础--抽象类和接口
  8. spring 学习总结(一)
  9. 互联网轻量级框架SSM-查缺补漏第八天(MyBatis插件plugin使用及原理)
  10. C Primer Plus 读后感