recyclerview用于多类型

参考:

高仿各大商城首页—使用分类型的RecyclerView来实现

Android 一个改善的okHttp封装库

效果:

recyclerview用于多类型_第1张图片

依赖:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.1.0'
    compile 'com.zhy:okhttputils:2.6.2'
    compile 'com.alibaba:fastjson:1.2.21'
    compile 'com.youth.banner:banner:1.4.4'
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.android.support:recyclerview-v7:24.1.0'
    compile 'com.jakewharton:butterknife:7.0.1'
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

布局:



    

    
    


    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

代码:

if (moduleBeanList != null) {
            //有数据
            //设置适配器
            homeRecycleAdapter = new HomeRecycleViewAdapter(mContext, moduleBeanList);
            rvHome.setAdapter(homeRecycleAdapter);

            //recycleView不仅要设置适配器还要设置布局管理者,否则图片不显示
            //第一个参数是上下文,第二个参数是只有一列
            GridLayoutManager manager = new GridLayoutManager(getActivity(), 1);
            rvHome.setLayoutManager(manager);
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

适配器代码:

注意:有几种类型要写几个viewholder

public class HomeRecycleViewAdapter extends RecyclerView.Adapter {
    /**
     * 4种类型
     */
    /**
     * 类型1:黑色星期五--使用banner实现
     */
    public static final int BLACK_5_BANNER0 = 0;
    /**
     *类型2:今日新品--使用GridView实现
     */
    public static final int TODAY_NEW_GV1 = 1;
    /**
     * 类型3:品牌福利--使用ImageView实现
     */
    public static final int PIN_PAI_IV2=2;

    /**
     * 类型4:搭配趋势--使用RecyclerView实现
     */
    public static final int DAPEIQS_GV3 =3;


    /**
     * 当前类型
     */
    public int currentType = BLACK_5_BANNER0;

    private final Context mContext;
    private final List moduleBeanList;
    /**
     * 以后用它来初始化布局
     */
    private final LayoutInflater mLayoutInflater;

    public HomeRecycleViewAdapter(Context mContext, List moduleBeanList) {
        this.mContext = mContext;
        this.moduleBeanList = moduleBeanList;
        //以后用它来初始化布局
        mLayoutInflater = LayoutInflater.from(mContext);
    }

    /**
     * 相当于getView创建ViewHolder布局
     *
     * @param parent
     * @param viewType 当前的类型
     * @return
     */
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == BLACK_5_BANNER0) {
            return new BBNViewHolder(mContext, mLayoutInflater.inflate(R.layout.banner_viewpager, null));
        }else if(viewType==TODAY_NEW_GV1){
            return new TODAYViewHolder(mContext,mLayoutInflater.inflate(R.layout.gv_channel,null));
        }else if(viewType==PIN_PAI_IV2) {
            return new PINPAIViewHolder(mContext, mLayoutInflater.inflate(R.layout.iv_pinpai, null));
        }else if(viewType== DAPEIQS_GV3) {
            return new DaPeiViewHolder(mContext, mLayoutInflater.inflate(R.layout.dapeiqs_rv, null));
        }
        return null;
    }

    /**
     * 相当于getView中的绑定数据模块
     *
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (getItemViewType(position) == BLACK_5_BANNER0) {
            BBNViewHolder bbnViewHolder= (BBNViewHolder) holder;
            List module0data = moduleBeanList.get(0).getData();
            bbnViewHolder.setData(module0data);
        }else if(getItemViewType(position)==TODAY_NEW_GV1) {
            TODAYViewHolder todayViewHolder= (TODAYViewHolder) holder;
            List module1data = moduleBeanList.get(1).getData();
            todayViewHolder.setData(module1data);
        }else if(getItemViewType(position)==PIN_PAI_IV2) {
            PINPAIViewHolder pinpaiViewHolder = (PINPAIViewHolder) holder;
            List pinpai2data = moduleBeanList.get(2).getData();
            pinpaiViewHolder.setData(pinpai2data);
        }else if(getItemViewType(position)== DAPEIQS_GV3) {
            DaPeiViewHolder dapeiViewHolder = (DaPeiViewHolder) holder;
            List dapeiqs6data = moduleBeanList.get(6).getData();
            dapeiViewHolder.setData(dapeiqs6data);
        }
    }
        /**
         * 总共有多少个item
         * @return
         */
        @Override
        public int getItemCount () {
            return 4;
        }

        /**
         *得到类型
         */
        @Override
        public int getItemViewType ( int position){
            switch (position) {
                case BLACK_5_BANNER0:
                    currentType = BLACK_5_BANNER0;
                    break;
                case TODAY_NEW_GV1:
                    currentType = TODAY_NEW_GV1;
                    break;
                case PIN_PAI_IV2:
                    currentType=PIN_PAI_IV2;
                    break;
                case DAPEIQS_GV3:
                    currentType= DAPEIQS_GV3;
                    break;
            }
            return currentType;
        }



        class DaPeiViewHolder extends RecyclerView.ViewHolder{

            private final Context mContext;
            private RecyclerView dapeiqs_rv;

            public DaPeiViewHolder(Context mContext, View itemView) {
                super(itemView);
                this.mContext=mContext;
                dapeiqs_rv= (RecyclerView) itemView.findViewById(R.id.dapeiqs_rv);

            }

            public void setData(List dapeiqs6data) {
                //1.已有数据
                //2.设置适配器:-->设置文本和recycleView的数据
                DaPeiQSRecycleViewAdapter adapter=new DaPeiQSRecycleViewAdapter(mContext,dapeiqs6data);
                //设置秒杀的adapter
                dapeiqs_rv.setAdapter(adapter);

                //recycleView不仅要设置适配器还要设置布局管理者,否则图片不显示
                LinearLayoutManager manager= new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false);
                dapeiqs_rv.setLayoutManager(manager);

            }
        }


        class TODAYViewHolder extends RecyclerView.ViewHolder{

            private final Context mContext;
            private GridView gridView;

            public TODAYViewHolder(Context mContext, View itemView) {
                super(itemView);
                this.mContext=mContext;
                gridView= (GridView) itemView.findViewById(R.id.gv_channel);
            }

            public void setData(List module1data) {
                //已得到数据了
                //设置适配器
                TodayGVAdapter adapter= new TodayGVAdapter(mContext,module1data);
                gridView.setAdapter(adapter);
            }
        }

    static class PINPAIViewHolder extends RecyclerView.ViewHolder {
        private final Context mContext;
        @Bind(R.id.iv_new_chok)
        ImageView ivNewChok;

        PINPAIViewHolder(Context mContext, View itemView) {
            super(itemView);
            this.mContext=mContext;
            ButterKnife.bind(this, itemView);
            ivNewChok= (ImageView) itemView.findViewById(R.id.iv_new_chok);
        }

        public void setData(List pinpai2data) {
            Glide.with(mContext)
                    .load(pinpai2data.get(0).getImg())
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .crossFade() //设置淡入淡出效果,默认300ms,可以传参
                    .into(ivNewChok);

        }
    }


     public  class BBNViewHolder extends RecyclerView.ViewHolder {

            private final Context mContext;
            private Banner banner;

            public BBNViewHolder(Context mContext, View itemView) {
                super(itemView);
                this.mContext = mContext;
                banner = (Banner) itemView.findViewById(R.id.banner);
            }

            public void setData(List module0data) {
                //设置Banner的数据
                //得到图片地址的集合
                List imageUrls=new ArrayList<>();
                for (int i=0;i

你可能感兴趣的:(android)