xListView分页加载数据

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 )注:我是自己手动添加的数据可能比较麻烦,一般服务器都会做分页的所以就可以直接调接口,不用自己在做数据的处理了。
这里写链接内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值