Android仿淘宝切换商品列表布局效果的示例代码
发布时间 - 2026-01-11 02:28:57 点击率:次最近电商项目中有这样一个需求,就是在进入商品列表界面,有一个按钮可以切换商品列表的布局(网格或者垂直列表排列)。

效果图:
上面两幅图分别是点击右上角按钮后显示两种不同布局的效果。简单的流程可以概括为:第一次进入页面,有个默认的布局(网格布局),点击按钮,由网格布局切换到竖直的线性布局,再次点击切换到网格布局。
分析:
可以看到商品展示的形式都是以列表的方式来展现,我用的是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排列布局
# 重写
# 中有
# 管理器
# 切换到
# 搞定了
# 返回值
# 的是
# 实现了
# 这一
# 他说
# 有个
# 大家都
# 就能
# 两种
# 说到
# 要去
# 是从
# 听了
# 我用
# 我可
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
JavaScript Ajax实现异步通信
Linux系统命令中tree命令详解
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
网站制作企业,网站的banner和导航栏是指什么?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
免费网站制作appp,免费制作app哪个平台好?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
b2c电商网站制作流程,b2c水平综合的电商平台?
Laravel中的withCount方法怎么高效统计关联模型数量
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
在Oracle关闭情况下如何修改spfile的参数
简历在线制作网站免费版,如何创建个人简历?
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
如何获取PHP WAP自助建站系统源码?
微信小程序 五星评分(包括半颗星评分)实例代码
如何快速搭建自助建站会员专属系统?
使用C语言编写圣诞表白程序
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
网站页面设计需要考虑到这些问题
如何快速完成中国万网建站详细流程?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
昵图网官方站入口 昵图网素材图库官网入口
微信h5制作网站有哪些,免费微信H5页面制作工具?
重庆市网站制作公司,重庆招聘网站哪个好?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
如何在阿里云域名上完成建站全流程?
香港服务器租用费用高吗?如何避免常见误区?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
Thinkphp 中 distinct 的用法解析
javascript中对象的定义、使用以及对象和原型链操作小结
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Python制作简易注册登录系统
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
JavaScript如何操作视频_媒体API怎么控制播放
Laravel如何实现本地化和多语言支持?(i18n教程)
jquery插件bootstrapValidator表单验证详解
Laravel如何升级到最新版本?(升级指南和步骤)
Laravel如何实现事件和监听器?(Event & Listener实战)
如何在万网自助建站中设置域名及备案?
Laravel如何配置Horizon来管理队列?(安装和使用)

