xrecyclerview多条目布局

来源:互联网 发布:kylin apache 编辑:程序博客网 时间:2024/06/05 06:37

1.导入依赖包

` compile 'com.jcodecraeer:xrecyclerview:1.3.2'

2.布局文件

 <com.jcodecraeer.xrecyclerview.XRecyclerView        android:id="@+id/home_xrcv"        android:layout_below="@id/seach_top"        android:layout_width="match_parent"        android:layout_height="match_parent">  </com.jcodecraeer.xrecyclerview.XRecyclerView>

4.加载布局管理器

 //加布局管理器        LinearLayoutManager layoutManager=new LinearLayoutManager(getActivity());        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);        homeXrcv.setLayoutManager(layoutManager);

5.设置 上拉加载下拉刷新的功能,

  //设置上拉和下拉监听        homeXrcv.setLoadingListener(new XRecyclerView.LoadingListener() {            @Override            public void onRefresh() {                //refresh data here                //刷新时清空                curr=0;                list.clear();                getData(API.TYPE_HOME,curr);                //刷新控件                homeXrcv.refreshComplete();            }            @Override            public void onLoadMore() {                // load more data here                //分页加载时使用                 /*   curr++;                getData(API.TYPE_HOME,curr);                xr.refreshComplete();*/            }        });       //加载数据       getData(API.TYPE_HOME,curr);

6.最关键的一步来了添加适配器

package sizu.nanshigou.adapter;import android.content.Context;import android.support.v7.widget.DefaultItemAnimator;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.nostra13.universalimageloader.core.ImageLoader;import com.youth.banner.Banner;import java.util.ArrayList;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;import cn.iwgang.countdownview.CountdownView;import sizu.nanshigou.Bean.HomeBean;import sizu.nanshigou.R;import sizu.nanshigou.view.GlideImageLoader;import sizu.nanshigou.view.SpacesItemDecoration;public class XRAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    HomeBean.DataBean data;    Context mcontext;    ArrayList mlist;    ArrayList bannerlist;    //枚举类型    private enum Item_Type {        Typeone, Typetwo, Typethree, Typefour, Typefive    }    //构造方法    public XRAdapter(HomeBean.DataBean data, Context mcontext) {        this.data = data;        this.mcontext = mcontext;    }    /**     * 创建ViewHolder     *     * @param parent     * @param viewType :不同ItemView的类型加载布局     * @return     */    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if (viewType == Item_Type.Typeone.ordinal()) {            View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_a, null);            ViewHolderA viewHolder = new ViewHolderA(mView);            return viewHolder;        } else if (viewType == Item_Type.Typetwo.ordinal()) {            View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_b, null);            ViewHolderB viewHolder = new ViewHolderB(mView);            return viewHolder;        } else if (viewType == Item_Type.Typethree.ordinal()) {            View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_c, null);            ViewHolderC viewHolder = new ViewHolderC(mView);            return viewHolder;        } else if (viewType == Item_Type.Typefour.ordinal()) {            View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_d, null);            ViewHolderD viewHolder = new ViewHolderD(mView);            return viewHolder;        } else if (viewType == Item_Type.Typefive.ordinal()) {            View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_e, null);            ViewHolderE viewHolder = new ViewHolderE(mView);            return viewHolder;        }        return null;    }    /**     * 绑定数据:可以直接拿到已经绑定控件的Viewholder对象     *     * @param holder     * @param position     */    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        //判断条目类型        if (holder instanceof ViewHolderA) {            mlist = new ArrayList();            for (int i = 0; i < data.getAd1().size(); i++) {                mlist.add(data.getAd1().get(i).getImage());            }            //设置banner图片加载器            ((ViewHolderA) holder).mbanner.setImageLoader(new GlideImageLoader());            ((ViewHolderA) holder).mbanner.setImages(mlist);            ((ViewHolderA) holder).mbanner.start();        } else if (holder instanceof ViewHolderB) {            //给子布局的控件传值            ImageLoader.getInstance().displayImage(data.getAd5().get(0).getImage(), ((ViewHolderB) holder).homeClassifiledImg1);            ((ViewHolderB) holder).homeClassifiledText1.setText(data.getAd5().get(0).getTitle());        } else if (holder instanceof ViewHolderC) {            ((ViewHolderC) holder).countdownView.start(555555555);            ((ViewHolderC) holder).tvc.setText("热门活动");            ImageLoader.getInstance().displayImage(data.getActivityInfo().getActivityInfoList().get(0).getActivityImg(), ((ViewHolderC) holder).tvcHotImg1);            ImageLoader.getInstance().displayImage(data.getActivityInfo().getActivityInfoList().get(1).getActivityImg(), ((ViewHolderC) holder).tvcHotImg2);        } else if (holder instanceof ViewHolderD) {            bannerlist = new ArrayList<>();            for (int i = 0; i < data.getSubjects().size(); i++) {                bannerlist.add(data.getSubjects().get(i).getImage());            }            ((ViewHolderD) holder).reItemdText.setText("热门专题");            ((ViewHolderD) holder).itemdMybanner.setImageLoader(new GlideImageLoader());            ((ViewHolderD) holder).itemdMybanner.setImages(bannerlist);            ((ViewHolderD) holder).itemdMybanner.start();        } else if (holder instanceof ViewHolderE) {            //设置layoutManager            ((ViewHolderE) holder).recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));            // 设置item动画            ((ViewHolderE) holder).recyclerView.setItemAnimator(new DefaultItemAnimator());            //设置item之间的间隔            SpacesItemDecoration decoration=new SpacesItemDecoration(16);            ((ViewHolderE) holder).recyclerView.addItemDecoration(decoration);            List<HomeBean.DataBean.DefaultGoodsListBean> defaultGoodsList = data.getDefaultGoodsList();            ((ViewHolderE) holder).recyclerView.setAdapter( new MasonryAdapter(mcontext,defaultGoodsList));        }    }    //得到item的数量    @Override    public int getItemCount() {        return 5;    }    //得到viewType类型 返回值赋值给onCreateViewHolder的参数    @Override    public int getItemViewType(int position) {        // return super.getItemViewType(position);        //根据下标判断类型返回布局        if (position == 0) {            return Item_Type.Typeone.ordinal();        } else if (position == 1) {            return Item_Type.Typetwo.ordinal();        } else if (position == 2) {            return Item_Type.Typethree.ordinal();        } else if (position == 3) {            return Item_Type.Typefour.ordinal();        } else if (position == 4) {            return Item_Type.Typefive.ordinal();        }        return -1;    }    class ViewHolderA extends RecyclerView.ViewHolder {        public Banner mbanner;        public ViewHolderA(View itemView) {            super(itemView);            mbanner = (Banner) itemView.findViewById(R.id.mybanner);        }    }    class ViewHolderB extends RecyclerView.ViewHolder {        //得到控件        @BindView(R.id.home_classifiled_img1)        ImageView homeClassifiledImg1;        @BindView(R.id.home_classifiled_text1)        TextView homeClassifiledText1;        public ViewHolderB(View itemView) {            super(itemView);            //初始化ButterKnife            ButterKnife.bind(this, itemView);        }    }    class ViewHolderC extends RecyclerView.ViewHolder {        @BindView(R.id.tvc)        TextView tvc;        @BindView(R.id.countdownView)        CountdownView countdownView;        @BindView(R.id.tvc_hot_img1)        ImageView tvcHotImg1;        @BindView(R.id.tvc_hot_img2)        ImageView tvcHotImg2;        public ViewHolderC(View itemView) {            super(itemView);            ButterKnife.bind(this, itemView);        }    }    class ViewHolderD extends RecyclerView.ViewHolder {        @BindView(R.id.itemd_mybanner)        Banner itemdMybanner;        @BindView(R.id.re_itemd_text)        TextView reItemdText;        public ViewHolderD(View itemView) {            super(itemView);            ButterKnife.bind(this, itemView);        }    }    class ViewHolderE extends RecyclerView.ViewHolder {        @BindView(R.id.id_recyclerview)        RecyclerView recyclerView;        public ViewHolderE(View itemView) {            super(itemView);            ButterKnife.bind(this, itemView);        }    }}

7.最后一步网络请求数据里添加适配器
点击 Okhttp网络请求封装使用

 private void getData(String url,int curr) {
    OkHttp3Utils.getInstance().doGet(url, new GsonObjectCallback<HomeBean>() {        @Override        public void onUi(HomeBean homeBean) {            homeBean.getMsg();           //添加适配器                  XRAdapter mxradapter=new XRAdapter(homeBean.getData(),getActivity());            homeXrcv.setAdapter(mxradapter);        }        @Override        public void onFailed(Call call, IOException e) {        }    });}

点击这里是github源码地址
8.最后的结果
这里写图片描述

原创粉丝点击