全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android仿淘宝切换商品列表布局效果的示例代码

最近电商项目中有这样一个需求,就是在进入商品列表界面,有一个按钮可以切换商品列表的布局(网格或者垂直列表排列)。

效果图:



上面两幅图分别是点击右上角按钮后显示两种不同布局的效果。简单的流程可以概括为:第一次进入页面,有个默认的布局(网格布局),点击按钮,由网格布局切换到竖直的线性布局,再次点击切换到网格布局。

分析:

可以看到商品展示的形式都是以列表的方式来展现,我用的是RecyclerView,这种列表并不复杂,配合Adapter数据适配器就实现了。

提出这个需求时,问了朋友,他说使用了两个Adapter、两个布局实现了这个效果。当时听了,我的内心是崩溃的。这样的设计方案在实际的App开发中是绝对不行的。如果单纯的为 了实现这个功能,那么可以理解。但是实际应用当中,数据都来自服务器,那么我们为了这么一个切换功能,还要去多请求一次服务器吗,多存储一些不必要的字段吗?显然这种设计方案是不行的。

RecyclerView强大的功能也支持了可以在不同布局之间的切换功能(LinearLayout,GridLyout,Stragged等等)。说到这,相信大家都想到了RecyclerView的布局管理器:LayoutManager。没错!就是它了

 

RecyclerView的setLayoutanager()方法可以让其布局在不同的排列方式间进行切换,常见的:从线性布局到网格布局、瀑布流。上面我们要实现的效果,其实就是从网格布局到线性布局的一个切换。看到这,相信大家都明白了,原来这一个方法就能搞定了,不过还别高兴的太早了。如果是简单的格式切换,利用上面的方式就已经完成了这种效果,但是我项目的效果在切换前和切换后的Item布局是不一样的,所以可以参考多布局的思路,RecyclerView的Adapter中有一个getItemViewType(int position)方法,来区别每一个Item的布局。我们需要重写该方法来实现不同的布局方式。在重写该方法时,返回值为Int型。利用该方法的返回值,我们就可以在onCreateViewHolder方法中去根据该返回值加载不用的布局了,然后在onBindViewHolder方法中同样根据不同的type去绑定对应布局的对应控件。

基本的实现流程,到这里就介绍完了,下面是具体的实现

第一步:在adapter中重写getItemViewType()方法;添加setType(int type)方法

/**
  * 点击切换布局的时候调用这个方法设置type
  *
  * @param type 商品排列的方式 0:网格;1:垂直列表排列
  */
 public void setType(int type) {
   this.type = type;
 }

 @Override
 public int getItemViewType(int position) {
   return type;
 }

第二步:在onCreateViewHolder()方法中根据自己设置的布局类型切换item布局

@Override
 public RecyclerView.ViewHolder onCreateMyViewHolder(ViewGroup parent, int viewType) {
   if (viewType == MainConstant.Classify.SORT_TYPE_GRID) {
     return new GoodsListViewHolder(inflater.inflate(R.layout.item_goods_list_grid, parent, false));
   } else if (type == MainConstant.Classify.SORT_TYPE_LINEAR) {
     return new GoodsListViewHolder(inflater.inflate(R.layout.item_goods_list, parent, false));
   }
   return null;
 }

第三步:在点击切换布局图片时

if(goodsType==0){ 
 showTypeIv.setImageResource(R.mipmap.good_type_grid); 
 //1:设置布局类型 
 adapter.setType(1); 
 //2:设置对应的布局管理器 
 recyclerView.setLayoutManager(gridLayoutManager); 
 //3:刷新adapter 
 adapter.notifyDataSetChanged(); 
 goodsType=1; 
}else if(goodsType==1){ 
 showTypeIv.setImageResource(R.mipmap.good_type_linear); 
 adapter.setType(0); 
 recyclerView.setLayoutManager(linearLayoutManager); 
 adapter.notifyDataSetChanged(); 
 goodsType=0; 
}

到此列表的布局切换就全部搞定了,如果需要Demo的话,我可以后续加上

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android  # 商品列表布局  # 淘宝商品列表  # 商品列表实现  # Android实现联动下拉框 下拉列表spinner的实例代码  # android二级listview列表实现代码  # Android ExpandableListView展开列表控件使用实例  # Android组件实现列表选择框功能  # Android UI组件Spinner下拉列表详解  # Android实现弹出列表、单选、多选框  # Android中RecyclerView实现多级折叠列表效果(二)  # Android中RecyclerView实现多级折叠列表效果(TreeRecyclerView)  # Android单个RecyclerView实现列表嵌套的效果  # Android列表RecyclerView排列布局  # 重写  # 中有  # 管理器  # 切换到  # 搞定了  # 返回值  # 的是  # 实现了  # 这一  # 他说  # 有个  # 大家都  # 就能  # 两种  # 说到  # 要去  # 是从  # 听了  # 我用  # 我可 


相关文章: 学校为何禁止电信移动建设网站?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  定制建站如何定义?其核心优势是什么?  ,南京靠谱的征婚网站?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  香港服务器WordPress建站指南:SEO优化与高效部署策略  建站VPS配置与SEO优化指南:关键词排名提升策略  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  香港服务器网站卡顿?如何解决网络延迟与负载问题?  淘宝制作网站有哪些,淘宝网官网主页?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  建站主机选择指南:服务器配置与SEO优化实战技巧  宁波自助建站系统如何快速打造专业企业网站?  实现虚拟支付需哪些建站技术支撑?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  如何续费美橙建站之星域名及服务?  寿县云建站:智能SEO优化与多行业模板快速上线指南  如何选择靠谱的建站公司加盟品牌?  如何在景安服务器上快速搭建个人网站?  移民网站制作流程,怎么看加拿大移民官网?  如何选购建站域名与空间?自助平台全解析  如何在万网自助建站中设置域名及备案?  如何通过云梦建站系统实现SEO快速优化?  网站制作企业,网站的banner和导航栏是指什么?  如何做静态网页,sublimetext3.0制作静态网页?  广州美橙建站如何快速搭建多端合一网站?  如何通过NAT技术实现内网高效建站?  如何在Tomcat中配置并部署网站项目?  如何用AWS免费套餐快速搭建高效网站?  建站主机系统SEO优化与智能配置核心关键词操作指南  公司网站制作价格怎么算,公司办个官网需要多少钱?  湖北网站制作公司有哪些,湖北清能集团官网?  制作宣传网站的软件,小红书可以宣传网站吗?  建站主机与服务器功能差异如何区分?  建站之星微信建站一键生成小程序+多端营销系统  如何高效配置IIS服务器搭建网站?  如何彻底删除建站之星生成的Banner?  如何选择域名并搭建高效网站?  建站主机选哪家性价比最高?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  建站为何优先选择香港服务器?  图册素材网站设计制作软件,图册的导出方式有几种?  如何在建站宝盒中设置产品搜索功能?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  中山网站制作网页,中山新生登记系统登记流程?  网站微信制作软件,如何制作微信链接?  一键网站制作软件,义乌购一件代发流程?  如何用景安虚拟主机手机版绑定域名建站?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。