在上一篇博客当中,我们讲了关于首页轮询广告的实现,接下来讲解一下首页频道布局的实现,如下图所示:

  

  这个布局用的是gridview去完成的,新建一个channel_item,代码如下所示:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:orientation="vertical"
 5     android:layout_width="match_parent"
 6     android:layout_height="170dp"
 7     android:background="#fff">
 8
 9     <GridView
10         android:id="@+id/gv_channel"
11         android:layout_width="wrap_content"
12         android:layout_height="150dp"
13         android:numColumns="5"></GridView>
14
15 </LinearLayout> 

  同样的也是需要创建一个在onCreateViewHolder()方法中创建ChannelViewHolder,继续在HomeFragmentAdapter类中去完善,代码如下所示:
  1 package com.nyl.shoppingmall.home.adapter;
  2
  3 import android.content.Context;
  4 import android.support.v7.widget.RecyclerView;
  5 import android.view.LayoutInflater;
  6 import android.view.View;
  7 import android.view.ViewGroup;
  8 import android.widget.AdapterView;
  9 import android.widget.GridView;
 10 import android.widget.ImageView;
 11 import android.widget.Toast;
 12
 13 import com.bumptech.glide.Glide;
 14 import com.nyl.shoppingmall.R;
 15 import com.nyl.shoppingmall.home.bean.ResultBeanData;
 16 import com.nyl.shoppingmall.utils.Constants;
 17 import com.youth.banner.Banner;
 18 import com.youth.banner.BannerConfig;
 19 import com.youth.banner.Transformer;
 20 import com.youth.banner.listener.OnBannerClickListener;
 21 import com.youth.banner.listener.OnLoadImageListener;
 22
 23 import java.util.ArrayList;
 24 import java.util.List;
 25
 26 /**
 27  * 首页适配器
 28  */
 29
 30 public class HomeFragmentAdapter extends RecyclerView.Adapter{
 31
 32     /**
 33      * 广告幅类型
 34      */
 35     public static final int BANNER = 0;
 36
 37     /**
 38      * 频道类型
 39      */
 40     public static final int CHANNEL = 1;
 41
 42     /**
 43      * 活动类型
 44      */
 45     public static final int ACT = 2;
 46
 47     /**
 48      * 秒杀类型
 49      */
 50     public static final int SECKILL = 3;
 51
 52     /**
 53      * 推荐类型
 54      */
 55     public static final int RECOMMEND = 4;
 56
 57     /**
 58      * 热卖类型
 59      */
 60     public static final int HOT = 5;
 61
 62     /**
 63      * 初始化布局
 64      */
 65     private LayoutInflater mLayoutInflater;
 66
 67     /**
 68      * 数据
 69      */
 70     private ResultBeanData.ResultBean resultBean;
 71     private Context mContext;
 72
 73     /**
 74      * 当前类型
 75      */
 76     private int currenType = BANNER;
 77
 78     public HomeFragmentAdapter(Context mContext, ResultBeanData.ResultBean resultBean) {
 79         this.mContext = mContext;
 80         this.resultBean = resultBean;
 81         mLayoutInflater = LayoutInflater.from(mContext);
 82     }
 83
 84     /**
 85      * 相当于getView创建ViewHolder部分代码
 86      * @param parent
 87      * @param viewType 当前的类型
 88      * @return
 89      */
 90     @Override
 91     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
 92         //轮循广告
 93         if (viewType == BANNER){
 94             //创建BannerViewHolder,Banner里面传布局文件
 95             return new BannerViewHolder(mContext,mLayoutInflater.inflate(R.layout.banner_viewpager,null));
 96             //频道
 97         }else if (viewType == CHANNEL){
 98             return new ChannelViewHolder(mContext,mLayoutInflater.inflate(R.layout.channel_item,null));
 99         }
100         return null;
101     }
102
103     /**
104      * 相当于getView中绑定数据模块
105      * @param holder
106      * @param position
107      */
108     @Override
109     public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
110         if (getItemViewType(position) == BANNER){
111             BannerViewHolder bannerViewHolder = (BannerViewHolder) holder;
112             bannerViewHolder.setData(resultBean.getBanner_info());
113         }else if (getItemViewType(position) == CHANNEL){
114             ChannelViewHolder channelViewHolder = (ChannelViewHolder) holder;
115             channelViewHolder.setData(resultBean.getChannel_info());
116         }
117     }
118
119     /**
120      * 广告幅
121      */
122     class BannerViewHolder extends RecyclerView.ViewHolder{
123
124         private Context mContext;
125         private Banner banner;
126
127         public BannerViewHolder(Context mContext, View itemView) {
128             super(itemView);
129             this.mContext = mContext;
130             this.banner = (Banner) itemView.findViewById(R.id.banner);
131         }
132
133         public void setData(List<ResultBeanData.ResultBean.BannerInfoEntity> banner_info) {
134             //得到图片集合地址
135             List<String> imagesUrl = new ArrayList<>();
136             for (int i = 0;i<banner_info.size();i++){
137                 String imageUrl = banner_info.get(i).getImage();
138                 imagesUrl.add(imageUrl);
139             }
140             //设置循环指示点
141             banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR);
142             //设置手风琴效果
143             banner.setBannerAnimation(Transformer.Accordion);
144             //设置Banner图片数据
145             banner.setImages(imagesUrl, new OnLoadImageListener() {
146                 @Override
147                 public void OnLoadImage(ImageView view, Object url) {
148                     //联网请求图片-Glide
149                     Glide.with(mContext).load(Constants.BASE_URL_IMAGE + url).into(view);
150                 }
151             });
152             //设置点击事件
153             banner.setOnBannerClickListener(new OnBannerClickListener() {
154                 @Override
155                 public void OnBannerClick(int position) {
156                     Toast.makeText(mContext,"position=="+position,Toast.LENGTH_SHORT).show();
157                 }
158             });
159         }
160     }
161
162     /**
163      * 频道
164      */
165     class ChannelViewHolder extends RecyclerView.ViewHolder{
166
167         private Context mContext;
168         private GridView gv_channel;
169         private ChannelAdapter adapter;
170
171         public ChannelViewHolder(Context mContext, View itemView) {
172             super(itemView);
173             this.mContext = mContext;
174             gv_channel = (GridView) itemView.findViewById(R.id.gv_channel);
175         }
176
177         public void setData(List<ResultBeanData.ResultBean.ChannelInfoBean> channel_info) {
178             //得到数据后,就设置GridView的适配器
179             adapter = new ChannelAdapter(mContext,channel_info);
180             gv_channel.setAdapter(adapter);
181
182             //设置item的点击事件
183             gv_channel.setOnItemClickListener(new AdapterView.OnItemClickListener() {
184                 @Override
185                 public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
186                     Toast.makeText(mContext,"position"+position,Toast.LENGTH_SHORT).show();
187                 }
188             });
189         }
190     }
191     /**
192      * 得到不同的类型
193      * @param position
194      * @return
195      */
196     @Override
197     public int getItemViewType(int position) {
198         switch (position){
199             case BANNER: //广告幅
200                 currenType = BANNER;
201                 break;
202             case CHANNEL: //频道
203                 currenType = CHANNEL;
204                 break;
205             case ACT: //活动
206                 currenType = ACT;
207                 break;
208             case SECKILL: //秒杀
209                 currenType = SECKILL;
210                 break;
211             case RECOMMEND: //推荐
212                 currenType = RECOMMEND;
213                 break;
214             case HOT: //热卖
215                 currenType = HOT;
216                 break;
217         }
218         return currenType;
219     }
220
221     /**
222      * 总共有多少个item
223      * @return
224      */
225     @Override
226     public int getItemCount() {
227         return 2;
228     }
229
230
231 }

  接着新建一个ChannelAdapter类,代码如下所示:
 1 package com.nyl.shoppingmall.home.adapter;
 2
 3 import android.content.Context;
 4 import android.view.View;
 5 import android.view.ViewGroup;
 6 import android.widget.BaseAdapter;
 7 import android.widget.ImageView;
 8 import android.widget.TextView;
 9
10 import com.bumptech.glide.Glide;
11 import com.nyl.shoppingmall.R;
12 import com.nyl.shoppingmall.home.bean.ResultBeanData;
13 import com.nyl.shoppingmall.utils.Constants;
14
15 import java.util.List;
16
17 /**
18  * 频道适配器
19  */
20
21 public class ChannelAdapter extends BaseAdapter{
22     private final Context mContext;
23     private final List<ResultBeanData.ResultBean.ChannelInfoBean> datas;
24
25     public ChannelAdapter(Context mContext, List<ResultBeanData.ResultBean.ChannelInfoBean> channel_info) {
26         this.mContext = mContext;
27         this.datas = channel_info;
28     }
29
30     @Override
31     public int getCount() {
32         return datas.size();
33     }
34
35     @Override
36     public Object getItem(int i) {
37         return null;
38     }
39
40     @Override
41     public long getItemId(int i) {
42         return 0;
43     }
44
45     @Override
46     public View getView(int position, View convertView, ViewGroup viewGroup) {
47         ViewHolder viewHolder;
48         if (convertView == null){
49             convertView = View.inflate(mContext, R.layout.item_channel,null);
50             viewHolder = new ViewHolder();
51             viewHolder.iv_channel = (ImageView) convertView.findViewById(R.id.iv_channel);
52             viewHolder.tv_channel = (TextView) convertView.findViewById(R.id.tv_channel);
53             convertView.setTag(viewHolder);
54         }else {
55             viewHolder = (ViewHolder) convertView.getTag();
56         }
57         //根据位置得到对应的数据
58         ResultBeanData.ResultBean.ChannelInfoBean channelInfoBean = datas.get(position);
59         //根据Glide设置图片
60         Glide.with(mContext).load(Constants.BASE_URL_IMAGE+channelInfoBean.getImage()).into(viewHolder.iv_channel);
61         viewHolder.tv_channel.setText(channelInfoBean.getChannel_name());
62         return convertView;
63     }
64     static class ViewHolder{
65         ImageView iv_channel;
66         TextView tv_channel;
67     }
68 }

转载于:https://www.cnblogs.com/nylcy/p/6601580.html

Android商城开发系列(九)—— 首页频道布局的实现相关推荐

  1. Android商城开发系列

    Android商城开发系列(一)--开篇 Android商城开发系列(二)--App启动欢迎页面制作 Android商城开发系列(三)--使用Fragment+RadioButton实现商城底部导航栏 ...

  2. Android商城开发系列(十)—— 首页活动广告布局实现

    在上一篇博客当中,我们讲了频道布局的实现,接下来我们讲解一下活动广告布局的实现,效果如下图: 这个是用viewpager去实现的,新建一个act_item.xml,代码如下所示: 1 <?xml ...

  3. Android商城开发系列(一)——开篇

    最近在看尚硅谷的硅谷商城视频,想系统学习一下Android的商城开发流程,打算跟着视频的一步步做出一个商城,然后写博客总结记录一下整个商城的开发过程以及使用到的技术知识点,这个商城的最终效果如下图所示 ...

  4. Android商城开发系列(二)——App启动欢迎页面制作

    商城APP一般都会在应用启动时有一个欢迎界面,下面我们来实现一个最简单的欢迎页开发:就是打开商城App,先出现欢迎界面,停留几秒钟,自动进入应用程序的主界面. 首先先定义WelcomeActivity ...

  5. Android商城开发系列(六)——使用 OkHttpUtils 请求网络 + 使用 fastjson解析数据...

    OkHttp是Google推荐使用的一个开源的网络请求框架,Android开发中涉及到网络请求和接口调用现在大部分都是使用OkHttp,网上已经有不少人针对OkHttp进行了封装,这里推荐一下鸿洋大神 ...

  6. Android商城开发----viewPager实现广告轮播(在首页Fragment中实现)

    Android商城开发----在商城首页Fragment使用viewPager实现广告轮播 写在前面:本篇文章建立在创建底部导航栏之后,对商城首页进行开发.创建底部导航栏的内容请查看:Android开 ...

  7. Android商城开发----点击左侧分类列表右侧更新对应列表内容

    Android商城开发----点击左侧分类列表右侧更新对应列表内容 目录 Android商城开发----点击左侧分类列表右侧更新对应列表内容 一.首先说布局: 二.主要说一下,布局完成后实现点击左侧类 ...

  8. Android商城开发----点击加入购物车,购物车商品的增删减

    Android商城开发----点击加入购物车,购物车商品的增删减 上一章节:[分类页面]点击左侧类别,实现右侧对应类别商品的展示 本文是在上一章节基础上开发的,点击[分类]页面商品的加入购物车按钮,实 ...

  9. Android自定义控件开发系列(零)——基础原理篇

    在后边的文章中发现在说Android自定义时,有时候要重复解释很多东西,所以想想返回来增加一篇"基础原理篇",直接进入正题吧-- 首先的问题是:在Android项目开发中,什么时候 ...

最新文章

  1. python paramiko使用_使用python的paramiko模块实现ssh与scp功能
  2. linux系统基础调优32条技巧
  3. MyBatis的插入数据操作
  4. python基础知识点小结(2021/2/9)
  5. 任正非:将来华为岗位分三类 职员类岗位不涉及末位淘汰
  6. vscode生成代码图片_vs Code 快速生成代码
  7. python 计时器_Python上下文管理器的魔力
  8. 阿里云Dataworks平台应用
  9. 短信发送接口超详细短信接口使用教程
  10. 计算机专硕怎么规划未来?
  11. MongoDB实战-分片概念和原理
  12. 工业大数据:中国智造下的“数字新基建”
  13. 笔记本控制台开启热点
  14. spring-boot源码解析之AnnotationConfigServletWebServerApplicationContext
  15. QDialog设置标题
  16. nokia 7 Android8,全面屏+原生安卓8.0:NOKIA 诺基亚 发布 Nokia 7 Plus 手机
  17. 【数据结构】测试7 图
  18. hdu-4933-Miaomiao's Function(BC#4 1003)
  19. php页游sf源码,开源程序 PHP源码 页游联运系统 CPA+CPS
  20. 科普:本来想试试这个东西的效果,实在没有精力呵呵 blog群发王(价值1980元)源代码提供

热门文章

  1. 黎曼猜想(一) 欧拉乘积式
  2. python __getattr__和__setattr__
  3. 苹果开发者帐号关联大批量下架如何规避?
  4. 快速批量修改word文档内容
  5. PO, AP, GL Open/Closed Period Action
  6. Qt显示PDF之四pdfium封装
  7. 最详细的教程axure新手入门:Axure教程
  8. 微信小程序使用键盘搜索功能
  9. 吃鸡ios和android灵敏度,2021吃鸡最佳灵敏度
  10. 微信和淘宝最赤裸的分析 转载