全网整合营销服务商

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

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

Android 列表形式的切换的示例代码

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

如京东:

本文最终实现的效果:

关键词: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小时内与您取得联系。