您的位置:首页 > 其它

xListView分页加载数据

2016-01-21 10:09 423 查看
android开发中有的时候不可能一次性把所有的数据加载进去所以必须要分页加载数据,所以xlistview是很多开发中常用的一种方式进行分页加载数据。网络上很容易找到类库,但是分页加载的倒是比较少见,所以我就分页加载数据的demo粘出来方便大家使用。



(1)代码demo 分页加载数据,默认加载第一页,每次加载5条数据

import java.util.ArrayList;
import com.example.xlistviewdemo.adapter.mAdapter;
import com.example.xlistviewdemo.model.Data;
import com.example.xlistviewdemo.util.DataUtil;
import com.example.xlistviewdemo.view.XListView;
import com.example.xlistviewdemo.view.XListView.IXListViewListener;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
/**
* 分页加载数据,默认加载第一页,每次加载5条数据
*/
public class MainActivity extends Activity implements IXListViewListener {
private XListView listview;
private ArrayList<Data> data;
private int currentPage;
private int total;
private int totalPage;
private String mMoreUrl;
private ArrayList<Data> list = new ArrayList<Data>();
private mAdapter adapter;
private ArrayList<Data> dataMore;
private int current_page;
private int cPage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (XListView) findViewById(R.id.listview);
listview.setPullLoadEnable(true);
listview.setPullRefreshEnable(true);
listview.setRefreshTime(DataUtil.getCurrentTime());
listview.setXListViewListener(this);
initData();
loadingData(1, 5, false, true);
}
/**
* 进行分页加载数据,每次默认加载5条数据
*/
private void loadingData(int currentPage, int pageSize, boolean isMore, boolean isLoad) {
if ("没有加载的数据了".equals(mMoreUrl)) {
listview.setPullRefreshEnable(true);
listview.stopLoadMore();
// ToastUtil.showToast(mContext, Constants.NO_MESSAGE);
Toast.makeText(MainActivity.this, "没有加载的数据了", 0).show();
} else {
if (!isMore) {
list.clear();
// 不加载更多的情况下(默认获取前五条数据)
for (int i = 0; i < 5; i++) {
list.add(data.get(i));
}
if (list != null) {
adapter = new mAdapter(MainActivity.this, list);
listview.setAdapter(adapter);
}
} else {
// 当多余5条 之后走加载更多的操作
dataMore = new ArrayList<Data>();
for (int i = (currentPage - 1) * 5; i < currentPage * 5; i++) {
dataMore.add(data.get(i));
}
if (list != null) {
list.addAll(dataMore);
adapter.notifyDataSetInvalidated();
}
}
if (isLoad) {
listview.stopRefresh();
} else {
listview.stopLoadMore();
}
if (currentPage == totalPage) {
// 表示没有加载的数据了
mMoreUrl = "没有加载的数据了";
} else {
currentPage++;
cPage = currentPage;
}
}
}
private void initData() {
data = new ArrayList<Data>();
for (int i = 0; i < 100; i++) {
Data d = new Data();
d.setId("1" + i);
d.setName("xlistviewDemo" + i);
data.add(d);
}
total = data.size();
totalPage = total / 5;
}
@Override
public void onRefresh() {
currentPage = 1;
mMoreUrl = null;
loadingData(1, 5, false, true);
}
@Override
public void onLoadMore() {
loadingData(cPage, 5, true, false);
}
}


( 3 )获取上次加载的时间

import java.text.SimpleDateFormat;
import java.util.Date;
public class DataUtil {
/**
* 格式化时间
*/
private final static ThreadLocal<SimpleDateFormat> dateFormater = new ThreadLocal<SimpleDateFormat>() {
@Override
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("MM-dd HH:mm");
}
};
/**
* 获取时间并格式化
*/
public static String getCurrentTime() {
Date nowTime = new Date();
String nowTimeStr = dateFormater.get().format(nowTime);
return nowTimeStr;
}
}


( 3 )注:我是自己手动添加的数据可能比较麻烦,一般服务器都会做分页的所以就可以直接调接口,不用自己在做数据的处理了。

这里写链接内容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: