android实战之ListView实现分页加载(一)制作Demo
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ListView实现分页加载(一)制作Demo
一、什么是分页加载
在下面的文章中,我们来讲解LitView分页加载的实现。
什么是分页加载呢?我们先看几张效果图吧,如下:
效果说明:我们向上滑动ListView的时候,当滑动的最底部,便会出现正在加载的进度条,当加载完成后,会出现加载后的数据。
如此反复,这其实就是ListView的分页加载功能。
像这样的工能,实在是太常见了。
那么它是怎
么实现的呢?
实现原理很简单,本质上,其实就是一个自定义的ListView,加上了底布局(即有进度条的那个布局),然后实现了ListView的OnScrollListener监听而已(即拖动监听)。
下面我们就开始一步一步手把手使用模拟的数据来实现这个功能。
二、准备简单的ListView
为了准备模拟的数据,我们先搭建一个简单的普通的ListView出来,因为我们需要这样一个Demo。
搭建完成后,我们再将ListView改成我们自定义的ListView,这样子你就能看清楚到底是怎么实现的了。
搭建ListView很简单。
首先实现主布局和子项布局。
分别如下:
主布局,activity_main.xml,代码如下:
<LinearLayout
xmlns:android="/apk/res/android"
xmlns:tools="/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="/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(yout.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 youtInflater;
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(yout.item, parent, false);
vh = new ViewHolder();
= (TextView)
convertView.findViewById(R.id.text_view);
convertView.setTag(vh);
}else{
vh = (ViewHolder) convertView.getTag();
}
.setText(Datas.get(position).getTxt());
return convertView;
}
class ViewHolder{
TextView tv;
}
}
好了,ListView的Demo我们已经准备好了。
下面是运行效果:
我们看此时是没有分页加载的。
那么我们还等什么,赶紧进入下一节,实现分页功能。