最近在做一个房贷计算器的项目,项目中需要实现一个较为复杂的表格。如下图所示。

12.png

需求是当滑动中间区域的内容时,表头可以跟着滑动。即左右滑动时,第一列固定,第一行和第二行的内容可以跟着内容区域一起滑动;上下滑动时,第一行第二行固定,第一列可以跟着内容区域一起滑动。

刚开始有点懵,内容区域怎么可以既能左右滑动又能上下滑动呢,listview只能实现上下滑动,无法实现;recycleView虽然可以实现左右滑动,但是也只能一次实现一个方向。

一个复杂的问题都是由一个个小问题所组成,可以把这个问题分解成以下几个小问题。

实现两个view的联动

实现view样式的自定义

实现表格数据的绑定

实现两个view的联动

先解决第一个问题,在Android里实现两个view的联动,我能想到的有两个方法。一个是设置滑动监听,当一个view滚动时,另一个view也滚动相同的距离。另一个是利用事件的分发机制,在两个view的外面再套一个父view,让父view拦截两个子view某一个方向的滑动事件即可。根据这个思路可以想到如下的实现方案。

Paste_Image.png

垂直方向是两个recycleView,外面套了一个垂直方向的ScrollView,这样便可以实现上下方向的联动。水平方向上是两个水平方向的HorizontalScrollView,互相设置滚动监听,这样便可以实现左右方向的联动。

联动实现了,不过这里有一个问题,水平方向的拓展性不是很好,无法跟垂直方向的recycleView一样动态的拓展。

开源库ScrollablePanel

我们再来看一个比较优秀的开源库是怎么实现的。

Paste_Image.png

它的布局很简单,垂直方向上使用了一个recycleView,故可以实现上下的联动。这个垂直recycleView的每一个item是由一个FrameLayout和一个水平方向的recycleView组成。每一个水平方向的recycleView都与顶部的recycleView互相设置滚动监听,由此实现左右方向的联动。这样的布局便解决了上文中提到的水平方向拓展性差的问题。

ScrollablePanel在github上有一千多颗star,除了它较好的布局外,它的封装也很值得学习。它只向开发者暴露了一个抽象的PanelAdapter 类。用户只要实现这个类确定每个View的布局和数据便可实现想要的功能。

public abstract class PanelAdapter {

//获得table的行数

public abstract int getRowCount();

//获得table的列数

public abstract int getColumnCount();

//获得view类型

public int getItemViewType(int row, int column) {

return 0;

}

//绑定数据

public abstract void onBindViewHolder(RecyclerView.ViewHolder holder, int row, int column);

//创建view

public abstract RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType);

}

这个类里面包含了用户最关心的问题,这个表格有多少行多少列,每一个view长什么样,需要填充什么数据,而把一些用户不关心的底层实现封装在内部。内部实现时会把PanelAdapter里面的view和数据传递给具体的adapter。

ScrollablePanel项目地址

android开发怎么做列表,Android复杂表格的实现相关推荐

  1. android开发实现选择列表,Android使用RecyclerView实现列表数据选择操作

    Android使用RecyclerView实现列表数据选择操作 发布时间:2020-08-31 17:50:13 来源:脚本之家 阅读:76 作者:迟做总比不做强 这些时间做安卓盒子项目,因为安卓电视 ...

  2. android开发 RecyclerView 瀑布列表布局

    android开发 RecyclerView 瀑布列表布局 1.写一个内容的自定义小布局: <?xml version="1.0" encoding="utf-8& ...

  3. 代码加密 android,Android 开发怎样做代码加密或混淆

    原标题:Android 开发怎样做代码加密或混淆 对于Android开发技术人员来说,隐藏代码或是混淆代码至关重要.试想自己辛辛苦苦赶工出来的产品,被其他开发者反编译后轻松拿走.放在哪里都是一件让人崩 ...

  4. Android开发介绍(基于Android Studio软件)

    Android开发介绍(基于Android Studio软件) 关于Android开发,笔者走过一些弯路,因此今天总计了有关Android开发的一些内容和心得,希望对大家有所帮助.首先来一张安卓开发者 ...

  5. android studio开发工具介绍,Android应用开发之Android开发工具介绍、Android Studio配置...

    本文将带你了解Android应用开发之Android开发工具介绍.Android Studio配置,希望本文对大家学Android有所帮助. 2.1   Android Studio配置 2.1.1 ...

  6. android 开发如何做内存优化

    不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露.其实如果我 们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造 ...

  7. Android开发丶二级列表的联动功能实现

    通常我们在外卖或者商城app会看到竖排二级列表的界面,点击左边列表的分类菜单,右边列表则会显示对应分类下的列表内容,这篇博文将对该功能的实现归纳和整理. 首先看下效果图: 在第一个页面选择最多三个标签 ...

  8. Android开发到底做什么?

    android开发时下很流行,且工资高需求量大.随便大街上看一堆人手里都是拿着android手机,屌丝嘛我也是用android手机的,便宜嘛,不好用了不好看了换个. android手机类等移动产品数不 ...

  9. android开发基础_列表视图一(List View)

    官网解释: a view that shows items in a verically list,The items come from the ListAdapter associated wit ...

最新文章

  1. js实现给a href= href赋值
  2. 深入浅出WPF(2)——解剖最简单的GUI程序
  3. u-boot.lds文件简介
  4. 中国寒龙反网络病毒联盟核心小组:官方公告,近期本站将会发布各种编程技术视频教程,详情请点击我们的以下公告!...
  5. 【常见笔试面试算法题12续集三】动态规划算法案例分析3 LIS练习题(最长上升子序列)
  6. 2017双11交易系统TMF2.0技术揭秘,实现全链路管理
  7. mysql-练习的数据准备
  8. linux测试接口配置,linux can 总线socket接口测试使用
  9. fedora下安装python
  10. 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC
  11. python的作用域分别有几种_Python中作用域的深入讲解
  12. 【转载】word空白页删不掉的7种原因及解决方法
  13. Python中CRAPS游戏,即花旗骰
  14. python遗传算法八皇后_python解决八皇后算法详解
  15. 【每日一读】Pro-GNN:Graph Structure Learning for Robust Graph Neural Networks
  16. PIESDKDoNet二次开发配置注意事项
  17. Excel学习日记:L12-打印分页
  18. Java反射的底层原理,以及Java反射的性能分析及优化
  19. Golang垃圾回收机制详解
  20. 使用python计算最大回撤

热门文章

  1. 这不是我心目中的比目猪!快来看看这只3D小猪佩奇!...
  2. python:根据一个列表对另外一个列表排序
  3. CdTe量子点表面修饰钼酸盐荧光微球/分子印迹荧光探针CdTe@MIPs/CdTe-QDs-IA荧光探针的制备
  4. C语言判断文件是否存在
  5. 《设计模式之禅》——代理模式
  6. 邂逅CMS第一感(疑难点)
  7. 联想小新笔记本系统损坏怎么重装系统?
  8. 大学生一定要理解的事
  9. js遍历map(js遍历map对象)
  10. shardingsphere 分片策略_shardingsphere-proxy 自定义分库,按年月日,季度,周分表规则...