效果图如下:
代码如下:
package com.listview.yy;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
/**
* ListView分页加载数据
* @author zhangkai281
*
*/
public class Main extends Activity {
private ListView listView;
private List<Map<String,Object>> data;
private MyAdapter adapter;
//分页加载的数据的数量
private int pageSize=10;
private final int pageType=1;
//查看更多
private TextView moreTextView;
//正在加载进度条
private LinearLayout loadProgressBar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_page);
listView=(ListView)findViewById(R.id.lv_id);
//第一个参数:1起始数 第二个参数:显示的数目
data=InitValue.initValue(1,10);
//在ListView中添加"加载更多"
addPageMore();
//添加"加载更多"一定要在设置Adapter之前
adapter=new MyAdapter(data,Main.this);
listView.setAdapter(adapter);
}
/**
* 加载下一页的数据
* @param pageStart
* @param pageSize
*/
private void chageListView(int pageStart,int pageSize){
List<Map<String,Object>> data=InitValue.initValue(pageStart,pageSize);
for (Map<String, Object> map : data)
{
this.data.add(map);
}
data=null;
}
/**
* 在ListView中添加"加载更多"
*/
private void addPageMore(){
View view=LayoutInflater.from(this).inflate(R.layout.list_page_load, null);
moreTextView=(TextView)view.findViewById(R.id.more_id);
loadProgressBar=(LinearLayout)view.findViewById(R.id.load_id);
moreTextView.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
//隐藏"加载更多"
moreTextView.setVisibility(View.GONE);
//显示进度条
loadProgressBar.setVisibility(View.VISIBLE);
new Thread(new Runnable() {
@Override
public void run() {
//休眠3秒,用于模拟网络操作时间
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//加载模拟数据:下一页数据, 在正常情况下,上面的休眠是不需要,直接使用下面这句代码加载相关数据
chageListView(data.size(),pageSize);
Message mes=handler.obtainMessage(pageType);
handler.sendMessage(mes);
}
}).start();
}
});
listView.addFooterView(view);
}
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case pageType:
//改变适配器的数目
adapter.count += pageSize;
//通知适配器,发现改变操作
adapter.notifyDataSetChanged();
//再次显示"加载更多"
moreTextView.setVisibility(View.VISIBLE);
//再次隐藏“进度条”
loadProgressBar.setVisibility(View.GONE);
break;
default:
break;
}
super.handleMessage(msg);
}
};
}
package com.listview.yy;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter{
List<Map<String,Object>> data;
Context context;
int count;
public MyAdapter(List<Map<String, Object>> data, Context context) {
super();
this.data = data;
this.context = context;
count=data.size();
}
@Override
public int getCount() {
return count;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view=LayoutInflater.from(context).inflate(R.layout.list_page_item, null);
TextView title=(TextView)view.findViewById(R.id.tv_id);
TextView text=(TextView)view.findViewById(R.id.title_id);
title.setText(data.get(position).get("title").toString());
text.setText(data.get(position).get("text").toString());
return view;
}
}
package com.listview.yy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class InitValue {
public static int page=1;
/**模拟数据分页加载,
*
* @param pageStart 起始数
* @param pageSize 每页显示数目
* @return
*/
public static List<Map<String,Object>> initValue(int pageStart,int pageSize)
{
Map<String,Object> map;
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
for(int i=0;i<pageSize;i++)
{
map=new HashMap<String,Object>();
map.put("text", "内容");
map.put("title", page+"--------------标题");
++page;
list.add(map);
}
return list;
}
}
源码下载地址:http://download.youkuaiyun.com/detail/abc13939746593/5095912