开发日记-20190426留下的待办,要是今天再不想着做做掉,估计以后就再也不会做了。拖延症晚期就是这么尴尬。

源码位置:

https://github.com/FrancisYuric/InfiniteFoldingView/tree/master/app/src/main/java/francis/ciruy/com/infinitefoldingview

实现效果:


一般开发业务的时候,往往并不是越抽象越好的,割鸡焉用牛刀?如果一开始就是完美了,那重构游戏不久索然无味了吗?嘛嘛,不过既然现在是在写demo,就意味着我可以为所欲为啦!适当玩一点平常不常玩的东西也是可以的= =!
在这次的demo中我希望视图实现两种模式,视图中的所有内容都是可替换的。

模式
  1. 傻瓜模式:顾名思义思议,使用者只需要填充需要写入的数据就能实现demo中的样式
  2. 自定义模式:这个就很有意思了,视图中的所有内容都是可替换的,包括标题布局,内容样式,点击触发事件。
实现思路
效果其实已经全部实现了,但是博客估计要分批写完了,今天估计也就写一下数据结构。毕竟东西虽说不多,但是真的也不少。单纯思路还是希望基于MVP的设计思路来实现,MVVM再专门找个时间来看看思想吧,半吊子的思想永远是很搞笑的,至少在我看来是这样的。我的想法始终如一,当我看到一滴水珠的时候,我希望看到其中所有水分子的运动,万物都存在规律,无序仅仅是因为自己的认知过浅,仅此而已。不多言废,直捣黄龙。先说说数据结构吧,其实花了一定的时间进行思考,关于怎么实现会比较有趣。我真的不是喜欢把东西弄复杂的人,所以我将会以尽可能简单的表达来述说清楚到底数据结构如何。
关键词:栈+多叉树

Java实现多叉树真的挺简单的,这里希望在每个节点添加对应的标记信息

  • isSelected:这个标记是为了应对选择位置变化而设定的,因为点击触发的效果每个业务所对应的需求很可能不同,比如说选中后字体颜色会发生变化啊,多选时需要一个标记来储存选中状态啊
  • isLast:这个标记想要达到的目的是,如果是标题Entity,则用于判定是不是最后一个子视图;如果是内容Entity,则用于判定当前部门是不是还有下一级子部门。

显示在界面中的基本数据类型:BaseContactEntity(基于多叉树)

public class BaseContactEntity extends BaseEntity {public Boolean isSelected;//数据是否被选中public Boolean isLast;//数据是否处于极端位置public List<BaseContactEntity> subDepartment = new ArrayList<>();
}

界面所显示的内容所对应的数据管理类:基于栈

public class ContactUtil {private List<BaseContactEntity> contactEntities = new ArrayList<>();public ContactUtil(BaseContactEntity contactEntity) {this.contactEntities.clear();this.contactEntities.add(contactEntity);}public void clicked(BaseContactEntity baseContactEntity) {int clickedIndex = contactEntities.indexOf(baseContactEntity);if (clickedIndex != -1)contactEntities = contactEntities.subList(0, clickedIndex + 1);elsecontactEntities.add(baseContactEntity);}public void push(BaseContactEntity baseContactEntity) {contactEntities.add(baseContactEntity);}public void pop() {contactEntities.remove(contactEntities.size() - 1);}public BaseContactEntity getLast() {return contactEntities.get(contactEntities.size() - 1);}public List<BaseContactEntity> getTitleList(){return contactEntities;}
}

想法也很简单,在我这个界面中需要执行的操作真的很单一,仅仅是点击标题用以显示某一个部门的所有子部门。或者点击某个子部门时,如果该子部门有子部门,则显示所有属于该部门的子部门并刷新标题栏。

总而言之就是两个操作:

  1. 点击标题
  2. 点击子部门

那么我完全可以将标题栏中显示的部门内容视为对栈中的数据进行操作,那么上述的两个操作可以等同于一次让多个数据出入栈。很明显,入栈只会按照父子顺序逐一入栈,这近一步简化了数据操作。而出栈可能会跨级,但是层级关系已经储存在容器中,只需要不断执行出栈操作,直到栈顶部门是当前选中标题对应的部门就行了。

我的表达能力有限,如果并没有讲清楚,那就说明我还有很大的进步空间,那也是让人兴奋的事情,不是吗= =!

Android分级部门选择界面(一)相关推荐

  1. Android分级部门选择界面(二)

    我承认,收入和才能往往是成正比的,但是说真的,如果没有这份才能,请向你的收入道歉. 不多言废.昨天大致上讲了讲部门选择视图的数据结构,个人感觉真的讲的其实挺清楚的,如果有建议,欢迎温柔地提出,因为这将 ...

  2. android选项菜单源代码,Android应用程序----UI界面控件(菜单menu)

    菜单是应用程序中非常重要的组成部分,能够在不占用界面空间的前提下,为应用程序提供了统一的功能和设置界面,并为程序开发人员提供了易于使用的编程接口 Android系统支持三种菜单 选项菜单(Option ...

  3. 部门选择控件源代码公布

    为了答谢大家对无须迭代两个循环完成树结构构建的支持特公布这两天新写的部门选择控件源代码,该控件最早是用一个用户控件实现数据调用采用Linq界面采用AtlasControlToolkit PopupCo ...

  4. Android studio开发-单界面单机小程序

    Android studio开发-单界面单机小程序 最终结果展示 步骤: 建立项目 file-new-new project 新建一个项目文件 选择一个empty activity 配置项目名称以及项 ...

  5. Android学习之登陆界面设计(一)前后期准备以及相关配置

    Android学习之登陆界面设计(一)前后期准备以及相关配置 前言 成品 成品样式 成品特点 工具 系统配置 手机配置 Android Studio 3.6.3 SDK 图片来源 矢量图标库 Back ...

  6. android 很多牛群叉界面库github地址

    android 很多牛叉界面库github地址 点击可到达github-------https://github.com/Trinea/android-open-project Android开源项目 ...

  7. android 很多牛叉界面库github地址

    点击可到达github-------https://github.com/Trinea/android-open-project 包括ListView.ActionBar.Menu.ViewPager ...

  8. unity3d5.1物体椭圆旋转选择界面实现(一)

      偶然在群里看到有人拿了一张椭圆物体旋转选择界面来问怎么实现(也不知道这样描述对不对,反正是椭圆的,而且还是旋转的,类似于关卡和角色选择),于是 想了下自己写了一个类似的功能,方法可能不是很完美,但 ...

  9. 安卓Android实现聊天滚动界面

    原帖: 跳转 Android实现聊天界面 更新时间:2018年06月13日 14:14:05   作者:Thierryxc   这篇文章主要为大家详细介绍了Android实现聊天界面的方法,具有一定的 ...

最新文章

  1. C examples
  2. 如何在CentOS 7上使用uWSGI和Nginx来运行Django应用程序
  3. Spark UDF用户自定义函数
  4. Mac下Sublime text2中文乱码问题的解决
  5. oracle数据库查表_Oracle面试问题-技术篇
  6. C#LeetCode刷题之#219-存在重复元素 II​​​​​​​(Contains Duplicate II)
  7. ajax 限制显示条数,jquery通过ajax获取数据,控制显示的数据条数
  8. 在HTML中使用JavaScript
  9. eclipse设置保护眼睛的背景色与字体
  10. 程序下载至开发板 芯片超时无应答,无法连接
  11. js中运算符的优先级
  12. Vim插件推荐--模糊搜索插件ctrlp使用方法
  13. JAVA基础---函数式接口、Stream流
  14. 用C语言循环码,xinxilunyubianma
  15. Kafka Sql:简单使用
  16. [HNOI2007]最小矩形覆盖(旋转卡壳)
  17. Domino多瑙河EAP3以及Nomad Web 1.0.5
  18. 【英语-同义词汇词组】advantage | ascendancy | predominance | preponderance | prepotency | superh的用法及区别
  19. WPF 自定义ToggleButton样式
  20. ACM-ICPC 2018沈阳赛区网络预选赛

热门文章

  1. 推荐一款IDE开发工具插件GitToolBox
  2. python类、模块、包
  3. vlc web 登录账号_怎么在web网页端解绑敬业签绑定的手机号?
  4. python中编写函数素数_如何用Python编写素数程序?
  5. linux改变工作目录命令,linux命令:cd命令,改变当前的工作目录
  6. linux rpm 怎么解压缩,dpkg rpm apt yum 的常用指令 +linux 各种解压缩方法
  7. dapper封装_用了Dapper之后通篇还是SqlConnection,真的看不下去了
  8. gnome mysql client_configure: error: Not found mysqlclient library
  9. Comet oj比赛组队
  10. linux 查看libevent 安装目录,linux下libevent安装配置与简介 以及 linux库文件搜索路径的配置...