电商项目中经常有这样的需求:在商品列表页面中,切换列表的展现形式,一般分为列表形式和表格形式。

如京东:
本文最终实现的效果:
关键词: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
相关文章:
建站之星如何优化SEO以实现高效排名?
广州美橙建站如何快速搭建多端合一网站?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
网站制作免费,什么网站能看正片电影?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
音乐网站服务器如何优化API响应速度?
制作网站的软件免费下载,免费制作app哪个平台好?
建站之星后台管理系统如何操作?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
盘锦网站制作公司,盘锦大洼有多少5G网站?
寿县云建站:智能SEO优化与多行业模板快速上线指南
企业微网站怎么做,公司网站和公众号有什么区别?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
广平建站公司哪家专业可靠?如何选择?
TestNG的testng.xml配置文件怎么写
活动邀请函制作网站有哪些,活动邀请函文案?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
建站之星收费标准详解:套餐费用及年费价格表一览
如何配置支付宝与微信支付功能?
建站之星如何助力企业快速打造五合一网站?
如何获取上海专业网站定制建站电话?
全景视频制作网站有哪些,全景图怎么做成网页?
如何通过FTP空间快速搭建安全高效网站?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
建站之星Pro快速搭建教程:模板选择与功能配置指南
如何在Windows环境下新建FTP站点并设置权限?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何自定义建站之星网站的导航菜单样式?
,在苏州找工作,上哪个网站比较好?
历史网站制作软件,华为如何找回被删除的网站?
如何在新浪SAE免费搭建个人博客?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何用好域名打造高点击率的自主建站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
网站制作网站,深圳做网站哪家比较好?
建站之星免费模板:自助建站系统与智能响应式一键生成
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
建站之星2.7模板快速切换与批量管理功能操作指南
定制建站方案优化指南:企业官网开发与建站费用解析
网站制作话术技巧,网站推广做的好怎么话术?
网站专业制作公司有哪些,做一个公司网站要多少钱?
Swift中循环语句中的转移语句 break 和 continue
Java解压缩zip - 解压缩多个文件或文件夹实例
魔方云NAT建站如何实现端口转发?
如何选择服务器才能高效搭建专属网站?
如何零成本快速生成个人自助网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何在Windows 2008云服务器安全搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。