您的位置:首页 > 其它

PullToRefreshListView实现下拉刷新和上拉加载更多

2016-01-27 10:51 681 查看
PullToRefreshListView是一个很好用的第三方库,可以支持下拉刷新和上拉加载更多数据,下面给出一个万能的框架:

大家使用的时侯只需要改变适配器和网络的访问方式就可以了,这里用到的是okhttp

[code]public class TuanFragment extends Fragment {

    private List<Goods.DatasEntity> datasEntities;//数据集合
    @ViewInject(R.id.lv_tuanlist)
    PullToRefreshListView pullToRefreshListView;
    private TuanGoodsAdapter adapter;
    private int page;//当前页数,默认为1
    private int size = 10;//每页数量
    private int count;//数据总量
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_tuan, null);
        ViewUtils.inject(this, view);
        initView();
        return view;
    }
    public void initView(){
        pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);//设置模式
        pullToRefreshListView.setShowIndicator(false);//去掉箭头图标
        pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
            @Override
            public void onRefresh(PullToRefreshBase<ListView> refreshView) {
                //当getScrollY()小于0时,代表下拉刷新,否则是上拉加载
                getDataFromServer(pullToRefreshListView.getScrollY() < 0);
                //设置上拉加载的文字提示
                ILoadingLayout loadingLayout = pullToRefreshListView.getLoadingLayoutProxy(false, true);
                loadingLayout.setPullLabel("上拉加载...");
            }
        });
        pullToRefreshListView.setOnItemClickListener(this);//条目点击
//        //首次来到页面加载数据
        new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(Message msg) {
                pullToRefreshListView.setRefreshing();//刷新
                return true;
            }
        }).sendEmptyMessageDelayed(0, 300);
    }
    public void getDataFromServer(final boolean refresh){
        if(refresh){
            //下拉刷新
            page = 1;
        }else{
            //上拉加载
            page++;
        }
        //访问网络
        OkHttpUtils.get().url(Constant.TUAN_URL).addParams("page",page+"")
                .addParams("size",size+"").build().execute(new StringCallback() {
            @Override
            public void onError(Request request, Exception e) {
                pullToRefreshListView.onRefreshComplete();
            }

            @Override
            public void onResponse(String response) {
                pullToRefreshListView.onRefreshComplete();
                Goods goods = new Gson().fromJson(response, new TypeToken<Goods>() {
                }.getType());
                count = goods.getCount();//数据的总量
                if (refresh) {//下拉刷新
                    datasEntities = goods.getDatas();//获取数据
                    adapter = new TuanGoodsAdapter(getActivity(), datasEntities);
                    pullToRefreshListView.setAdapter(adapter);
                } else {//上拉加载更多
                    //在原有数据的集合中把新的数据添加进去
                    datasEntities.addAll(goods.getDatas());
                    adapter.notifyDataSetChanged();
                }
                //当前获取的数据量小于每页的条数,说明没有数据了
                if (goods.getDatas.size < size) {
                    ToastUtil.showToast(getActivity(), "没数据了");
                    //设置为不支持上刷新了
                    pullToRefreshListView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);
                }
            }
        });
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: