XRecyclerView+上拉加载下拉刷新+多条目加载

首先我是先创建了一个fragment+viewpager,然后在fragment其中的一个页面操作xrecyclerview和多条目显示,同时还做了Banner的轮播图

接下来先看一下fragment中的代码,xml中自己可以自定义配置,这里我就不贴了


package com.example.enddemo.fragments;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.enddemo.R;
import com.example.enddemo.utils.GsonObjectCallback;
import com.example.enddemo.utils.HomeBean;
import com.example.enddemo.utils.OkHttp3Utils;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import okhttp3.Call;

/**
 * Created by Administrator on 2017/10/25 0025.
 */

public class Fragment1 extends Fragment {
    private XRecyclerView recyclerView;
    private Context context;
    private List<HomeBean.SongListBean > list;
    int mm=21;
    String mpath="http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type="+mm+"&size=10&offset=0&qq-pf-to=pcqq.c2c";
    //获取数据的开始
    private int curr;
    private MyAdapter adapter;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.frag1,container,false);

        recyclerView=(XRecyclerView)view.findViewById(R.id.xre_xrv);
        list=new ArrayList<>();

        //LinearLayoutManager是线性布局,setOrientation可以设置他的方向是横向还是纵向。
        LinearLayoutManager layoutManager=new LinearLayoutManager(context);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            //下拉刷新
            public void onRefresh() {
                //当下拉刷新的时候,重新获取数据,所有curr要变回0,并且把集合list清空

                list.clear();
                getData(mpath,"");
                recyclerView.refreshComplete();
            }

            @Override
            //上拉加载
            public void onLoadMore() {


                 mm++;
                getData(mpath,"load");
                String mpath="http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type="+mm+"&size=10&offset=0&qq-pf-to=pcqq.c2c";

            }
        });

        //第一次获取数据

        getData(mpath,"");
        return view;
    }
    public void getData(String url, final String curr){
        OkHttp3Utils.getInstance().doGet(url, new GsonObjectCallback<HomeBean>() {
            @Override
            public void onUi(HomeBean homeBean) {
                List<HomeBean.SongListBean> data = homeBean.getSong_list();
                if(curr.equals("load")){
                    list.addAll(data);
                    adapter.notifyDataSetChanged();
                    recyclerView.loadMoreComplete();
                }else {
                    list=homeBean.getSong_list();
                    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
                    adapter=new MyAdapter(getActivity(),list);
                    recyclerView.setAdapter(adapter);
                }
            }

            @Override
            public void onFailed(Call call, IOException e) {

            }
        });
    }

}
这个代码通过给OKhttp的网络请求传值来完成分页和上拉加载下拉刷新的功能,那么数据配置我们来看一下适配器中的代码

package com.example.enddemo.fragments;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.enddemo.R;
import com.example.enddemo.utils.GlideImaGlideImageLoader;
import com.example.enddemo.utils.HomeBean;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.youth.banner.Banner;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017/10/25 0025.
 */
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    List<HomeBean.SongListBean> list;
    Context context;
    ArrayList mlist;
    ImageLoader loader;
    public MyAdapter(Context context, List<HomeBean.SongListBean> list) {
        this.context = context;
        this.list = list;
        mlist=new ArrayList();
        loader=ImageLoader.getInstance();
    }
    public enum Item_Type{
        typeone,typetwo
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType==Item_Type.typeone.ordinal()){
            View view= LayoutInflater.from(context).inflate(R.layout.my_banner,parent,false);
            ViewHolderA va=new ViewHolderA(view);
            return va;
        }else if(viewType==Item_Type.typetwo.ordinal()){
            View view= LayoutInflater.from(context).inflate(R.layout.my_item,parent,false);
            ViewHolderB vB=new ViewHolderB(view);
            return vB;
        }
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            if(holder instanceof ViewHolderA){
                for(int i=0; i<list.size();i++){
                    String ad1s = list.get(i).getPic_big();
                    mlist.add(ad1s);
                }
                ((ViewHolderA) holder).mbanner.setImageLoader(new GlideImaGlideImageLoader());
                ((ViewHolderA) holder).mbanner.setImages(mlist);
                ((ViewHolderA) holder).mbanner.start();
            }else if(holder instanceof  ViewHolderB){

                    String img = list.get(position).getPic_big();
                    loader.displayImage(img, ((ViewHolderB) holder).img);
                    ((ViewHolderB) holder).text.setText(list.get(position).getAlbum_title());

            }
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    @Override
    public int getItemViewType(int position) {
        if(position==0){
            return Item_Type.typeone.ordinal();
        }else{
            return Item_Type.typetwo.ordinal();
        }
    }
    public class ViewHolderA extends RecyclerView.ViewHolder{
        Banner mbanner;
        public ViewHolderA(View itemView) {
            super(itemView);
            mbanner=(Banner) itemView.findViewById(R.id.banners);
        }
    }
    public class ViewHolderB extends RecyclerView.ViewHolder{
            TextView text;
            ImageView img;

        public ViewHolderB(View itemView) {
            super(itemView);
            text=(TextView) itemView.findViewById(R.id.tv);
            img=(ImageView)itemView.findViewById(R.id.imgs);
        }
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值