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

**正所谓,一入商城深似海~
商城类的App,确实是有许多东西值得学习,但是只要略微斟酌一下,你又会发现,它们之间存在着许多不谋而合的相似,也就是所谓的雷同~既然如此,让我们也来接下地气,先从一个简单的首页做起吧~**
源博客http://blog.csdn.net/cjm2484836553/article/details/53363233
实现的效果如下图:

这里写图片描述

1.大布局就是一个简单的RecyclerView:
也可以通过添加多个header实现

4.这里我仅以四种类型为例

/** 
    * 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;  
  • 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

5.下面就来一一实现这四种类型

@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;  
    }  


@Override  
   public int getItemCount() {  
       //四种类型 有几种类型就写几
       return 4;  
   }  
  /**
  * 不同的类型创建不同的布局  使用不同的holder
  */
   @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) {  
           //布局:垂直线性,TextView+RecyclerView  
           return new DaPeiViewHolder(mContext, mLayoutInflater.inflate(R.layout.dapeiqs_rv, null));  
       }  
       return null;  
   }  

   @Override  
   public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {  
       if (getItemViewType(position) == BLACK_5_BANNER0) {  
           BBNViewHolder bbnViewHolder = (BBNViewHolder) holder;  
           List<WomenBean.WomenData.ModuleBean.DataBean> module0data = moduleBeanList.get(0).getData();  
           bbnViewHolder.setData(module0data);  
       } else if (getItemViewType(position) == TODAY_NEW_GV1) {  
           TODAYViewHolder todayViewHolder = (TODAYViewHolder) holder;  
           List<WomenBean.WomenData.ModuleBean.DataBean> module1data = moduleBeanList.get(1).getData();  
           todayViewHolder.setData(module1data);  
       } else if (getItemViewType(position) == PIN_PAI_IV2) {  
           PINPAIViewHolder pinpaiViewHolder = (PINPAIViewHolder) holder;  
           List<WomenBean.WomenData.ModuleBean.DataBean> pinpai2data = moduleBeanList.get(2).getData();  
           pinpaiViewHolder.setData(pinpai2data);  
       } else if (getItemViewType(position) == DAPEIQS_GV3) {  
           DaPeiViewHolder dapeiViewHolder = (DaPeiViewHolder) holder;  
           List<WomenBean.WomenData.ModuleBean.DataBean> dapeiqs6data = moduleBeanList.get(6).getData();  
           dapeiViewHolder.setData(dapeiqs6data);  
       }  
   }  
  /**
  *  这里只写了一种holder (有几种类型就需要添加几个holder)
  */
   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<WomenBean.WomenData.ModuleBean.DataBean> dapeiqs6data) {  
           //1.已有数据  
           //2.设置适配器  
           DaPeiQSRecycleViewAdapter adapter = new DaPeiQSRecycleViewAdapter(mContext, dapeiqs6data);  
           dapeiqs_rv.setAdapter(adapter);  

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

--------------------- 本文来自 kklxb 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_22491765/article/details/56008981?utm_source=copy

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值