Android商城开发系列(九)—— 首页频道布局的实现
在上一篇博客当中,我们讲了关于首页轮询广告的实现,接下来讲解一下首页频道布局的实现,如下图所示:
这个布局用的是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商城开发系列(九)—— 首页频道布局的实现相关推荐
- Android商城开发系列
Android商城开发系列(一)--开篇 Android商城开发系列(二)--App启动欢迎页面制作 Android商城开发系列(三)--使用Fragment+RadioButton实现商城底部导航栏 ...
- Android商城开发系列(十)—— 首页活动广告布局实现
在上一篇博客当中,我们讲了频道布局的实现,接下来我们讲解一下活动广告布局的实现,效果如下图: 这个是用viewpager去实现的,新建一个act_item.xml,代码如下所示: 1 <?xml ...
- Android商城开发系列(一)——开篇
最近在看尚硅谷的硅谷商城视频,想系统学习一下Android的商城开发流程,打算跟着视频的一步步做出一个商城,然后写博客总结记录一下整个商城的开发过程以及使用到的技术知识点,这个商城的最终效果如下图所示 ...
- Android商城开发系列(二)——App启动欢迎页面制作
商城APP一般都会在应用启动时有一个欢迎界面,下面我们来实现一个最简单的欢迎页开发:就是打开商城App,先出现欢迎界面,停留几秒钟,自动进入应用程序的主界面. 首先先定义WelcomeActivity ...
- Android商城开发系列(六)——使用 OkHttpUtils 请求网络 + 使用 fastjson解析数据...
OkHttp是Google推荐使用的一个开源的网络请求框架,Android开发中涉及到网络请求和接口调用现在大部分都是使用OkHttp,网上已经有不少人针对OkHttp进行了封装,这里推荐一下鸿洋大神 ...
- Android商城开发----viewPager实现广告轮播(在首页Fragment中实现)
Android商城开发----在商城首页Fragment使用viewPager实现广告轮播 写在前面:本篇文章建立在创建底部导航栏之后,对商城首页进行开发.创建底部导航栏的内容请查看:Android开 ...
- Android商城开发----点击左侧分类列表右侧更新对应列表内容
Android商城开发----点击左侧分类列表右侧更新对应列表内容 目录 Android商城开发----点击左侧分类列表右侧更新对应列表内容 一.首先说布局: 二.主要说一下,布局完成后实现点击左侧类 ...
- Android商城开发----点击加入购物车,购物车商品的增删减
Android商城开发----点击加入购物车,购物车商品的增删减 上一章节:[分类页面]点击左侧类别,实现右侧对应类别商品的展示 本文是在上一章节基础上开发的,点击[分类]页面商品的加入购物车按钮,实 ...
- Android自定义控件开发系列(零)——基础原理篇
在后边的文章中发现在说Android自定义时,有时候要重复解释很多东西,所以想想返回来增加一篇"基础原理篇",直接进入正题吧-- 首先的问题是:在Android项目开发中,什么时候 ...
最新文章
- python paramiko使用_使用python的paramiko模块实现ssh与scp功能
- linux系统基础调优32条技巧
- MyBatis的插入数据操作
- python基础知识点小结(2021/2/9)
- 任正非:将来华为岗位分三类 职员类岗位不涉及末位淘汰
- vscode生成代码图片_vs Code 快速生成代码
- python 计时器_Python上下文管理器的魔力
- 阿里云Dataworks平台应用
- 短信发送接口超详细短信接口使用教程
- 计算机专硕怎么规划未来?
- MongoDB实战-分片概念和原理
- 工业大数据:中国智造下的“数字新基建”
- 笔记本控制台开启热点
- spring-boot源码解析之AnnotationConfigServletWebServerApplicationContext
- QDialog设置标题
- nokia 7 Android8,全面屏+原生安卓8.0:NOKIA 诺基亚 发布 Nokia 7 Plus 手机
- 【数据结构】测试7 图
- hdu-4933-Miaomiao's Function(BC#4 1003)
- php页游sf源码,开源程序 PHP源码 页游联运系统 CPA+CPS
- 科普:本来想试试这个东西的效果,实在没有精力呵呵 blog群发王(价值1980元)源代码提供