android开发怎么做列表,Android复杂表格的实现
最近在做一个房贷计算器的项目,项目中需要实现一个较为复杂的表格。如下图所示。
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复杂表格的实现相关推荐
- android开发实现选择列表,Android使用RecyclerView实现列表数据选择操作
Android使用RecyclerView实现列表数据选择操作 发布时间:2020-08-31 17:50:13 来源:脚本之家 阅读:76 作者:迟做总比不做强 这些时间做安卓盒子项目,因为安卓电视 ...
- android开发 RecyclerView 瀑布列表布局
android开发 RecyclerView 瀑布列表布局 1.写一个内容的自定义小布局: <?xml version="1.0" encoding="utf-8& ...
- 代码加密 android,Android 开发怎样做代码加密或混淆
原标题:Android 开发怎样做代码加密或混淆 对于Android开发技术人员来说,隐藏代码或是混淆代码至关重要.试想自己辛辛苦苦赶工出来的产品,被其他开发者反编译后轻松拿走.放在哪里都是一件让人崩 ...
- Android开发介绍(基于Android Studio软件)
Android开发介绍(基于Android Studio软件) 关于Android开发,笔者走过一些弯路,因此今天总计了有关Android开发的一些内容和心得,希望对大家有所帮助.首先来一张安卓开发者 ...
- android studio开发工具介绍,Android应用开发之Android开发工具介绍、Android Studio配置...
本文将带你了解Android应用开发之Android开发工具介绍.Android Studio配置,希望本文对大家学Android有所帮助. 2.1 Android Studio配置 2.1.1 ...
- android 开发如何做内存优化
不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露.其实如果我 们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造 ...
- Android开发丶二级列表的联动功能实现
通常我们在外卖或者商城app会看到竖排二级列表的界面,点击左边列表的分类菜单,右边列表则会显示对应分类下的列表内容,这篇博文将对该功能的实现归纳和整理. 首先看下效果图: 在第一个页面选择最多三个标签 ...
- Android开发到底做什么?
android开发时下很流行,且工资高需求量大.随便大街上看一堆人手里都是拿着android手机,屌丝嘛我也是用android手机的,便宜嘛,不好用了不好看了换个. android手机类等移动产品数不 ...
- android开发基础_列表视图一(List View)
官网解释: a view that shows items in a verically list,The items come from the ListAdapter associated wit ...
最新文章
- js实现给a href= href赋值
- 深入浅出WPF(2)——解剖最简单的GUI程序
- u-boot.lds文件简介
- 中国寒龙反网络病毒联盟核心小组:官方公告,近期本站将会发布各种编程技术视频教程,详情请点击我们的以下公告!...
- 【常见笔试面试算法题12续集三】动态规划算法案例分析3 LIS练习题(最长上升子序列)
- 2017双11交易系统TMF2.0技术揭秘,实现全链路管理
- mysql-练习的数据准备
- linux测试接口配置,linux can 总线socket接口测试使用
- fedora下安装python
- 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC
- python的作用域分别有几种_Python中作用域的深入讲解
- 【转载】word空白页删不掉的7种原因及解决方法
- Python中CRAPS游戏,即花旗骰
- python遗传算法八皇后_python解决八皇后算法详解
- 【每日一读】Pro-GNN:Graph Structure Learning for Robust Graph Neural Networks
- PIESDKDoNet二次开发配置注意事项
- Excel学习日记:L12-打印分页
- Java反射的底层原理,以及Java反射的性能分析及优化
- Golang垃圾回收机制详解
- 使用python计算最大回撤
热门文章
- 这不是我心目中的比目猪!快来看看这只3D小猪佩奇!...
- python:根据一个列表对另外一个列表排序
- CdTe量子点表面修饰钼酸盐荧光微球/分子印迹荧光探针CdTe@MIPs/CdTe-QDs-IA荧光探针的制备
- C语言判断文件是否存在
- 《设计模式之禅》——代理模式
- 邂逅CMS第一感(疑难点)
- 联想小新笔记本系统损坏怎么重装系统?
- 大学生一定要理解的事
- js遍历map(js遍历map对象)
- shardingsphere 分片策略_shardingsphere-proxy 自定义分库,按年月日,季度,周分表规则...