Android 列表形式的切换的示例代码
发布时间 - 2026-01-11 03:14:59 点击率:次电商项目中经常有这样的需求:在商品列表页面中,切换列表的展现形式,一般分为列表形式和表格形式。

如京东:
本文最终实现的效果:
关键词:RecyclerView
主布局文件:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
列表形式布局文件:item_list.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="98dp"
android:layout_margin="8dp"
android:background="@color/colorAccent">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Large.Inverse"
android:layout_centerInParent="true"
tools:text="1" />
</RelativeLayout>
表格形式布局文件:item_grid.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="98dp"
android:layout_margin="8dp"
android:background="@color/colorAccent">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:layout_centerInParent="true"
tools:text="1" />
</RelativeLayout>
实现原理:使用 RecyclerView 的 GridLayoutManager,列表形式指定列数为1,表格形式指定列数为具体列值。
默认为列表形式,指定列数为1:
recyclerView = (RecyclerView) findViewById(R.id.recycler_view); // 指定列数为1 gridLayoutManager = new GridLayoutManager(this, COLUMN_ONE); recyclerView.setLayoutManager(gridLayoutManager);
列表形式和表格形式之间的切换:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_toggle) {
if (gridLayoutManager.getSpanCount() == COLUMN_ONE) {
gridLayoutManager.setSpanCount(COLUMN_THREE);
item.setIcon(ContextCompat.getDrawable(this, R.drawable.ic_grid));
} else {
gridLayoutManager.setSpanCount(COLUMN_ONE);
item.setIcon(ContextCompat.getDrawable(this, R.drawable.ic_list));
}
simpleAdapter.notifyItemRangeChanged(0, simpleAdapter.getItemCount());
return true;
}
return super.onOptionsItemSelected(item);
}
通过 gridLayoutManager.setSpanCount(int cloumn) 设置列数,最后不要忘记 simpleAdapter.notifyItemRangeChanged(0, simpleAdapter.getItemCount()) 刷新数据。
Adapter的处理:
定义两种 view 类型:VIEW_TYPE_LIST 和 VIEW_TYPE_GRID
根据不同的 view 类型加载相应的布局文件,如下:
@Override
public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView;
if (viewType == VIEW_TYPE_LIST) {
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_list, parent, false);
} else {
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_grid, parent, false);
}
return new SimpleViewHolder(itemView, viewType);
}
获取 view 类型:列数为1时,view 类型为 VIEW_TYPE_LIST,列数为3时, view类型为 VIEW_TYPE_GRID
@Override
public int getItemViewType(int position) {
final int viewType;
int column = layoutManager.getSpanCount();
switch (column) {
case COLUMN_ONE:
viewType = VIEW_TYPE_LIST;
break;
case COLUMN_THREE:
viewType = VIEW_TYPE_GRID;
break;
default:
throw new RuntimeException("wtf?");
}
return viewType;
完整代码:https://github.com/wangshouquan/list-to-grid
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 列表形式的切换
# 列表切换
# Android仿淘宝切换商品列表布局效果的示例代码
# Android之淘宝商品列表长按遮罩效果的实现
# Android仿美团淘宝实现多级下拉列表菜单功能
# Android实现淘宝商品列表切换效果
# 关键词
# 数为
# 两种
# 大家多多
# 不要忘记
# 默认为
# 京东
# 中经
# 加载
# RelativeLayout
# item_list
# wrap_content
# tools
# layout_margin
# dp
# support
# layout_height
# widget
# match_parent
# recycler_view
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在服务器上配置二级域名建站?
JavaScript Ajax实现异步通信
如何快速查询网址的建站时间与历史轨迹?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel如何实现多对多模型关联?(Eloquent教程)
如何在万网自助建站中设置域名及备案?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
如何用免费手机建站系统零基础打造专业网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何登录建站主机?访问步骤全解析
Laravel用户密码怎么加密_Laravel Hash门面使用教程
微信小程序 配置文件详细介绍
网站制作企业,网站的banner和导航栏是指什么?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
微信h5制作网站有哪些,免费微信H5页面制作工具?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
新三国志曹操传主线渭水交兵攻略
Python函数文档自动校验_规范解析【教程】
javascript中闭包概念与用法深入理解
Laravel如何优化应用性能?(缓存和优化命令)
高防服务器租用如何选择配置与防御等级?
大连 网站制作,大连天途有线官网?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
EditPlus中的正则表达式实战(6)
如何打造高效商业网站?建站目的决定转化率
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
免费视频制作网站,更新又快又好的免费电影网站?
Laravel如何创建自定义Facades?(详细步骤)
Android Socket接口实现即时通讯实例代码
如何在IIS7上新建站点并设置安全权限?
制作企业网站建设方案,怎样建设一个公司网站?
jQuery 常见小例汇总
nodejs redis 发布订阅机制封装实现方法及实例代码
如何快速完成中国万网建站详细流程?
网站图片在线制作软件,怎么在图片上做链接?
JavaScript如何操作视频_媒体API怎么控制播放
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel如何处理表单验证?(Requests代码示例)
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
三星网站视频制作教程下载,三星w23网页如何全屏?
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
linux写shell需要注意的问题(必看)
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
开心动漫网站制作软件下载,十分开心动画为何停播?
如何在建站之星绑定自定义域名?
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信

