随着Kotlin的推广,一些国内公司的安卓项目开发,已经从Java完全切成Kotlin了。虽然Kotlin在各类编程语言中的排名比较靠后(据TIOBE发布了 19 年 8 月份的编程语言排行榜,Kotlin竟然排名45位),但是作为安卓开发者,掌握该语言,却已是大势所趋了。
Kotlin的基础用法,整体还是比较简单的,网上已经有很多文章了,大家熟悉下即可。
此次案例,之所以选择分页列表,主要是因为该功能通用性强,涵盖的技术点也较多,对开发者熟悉Kotlin帮助性较大。
案例的主要需求如下( 参考主流电商APP实现 ):
1、列表支持手势滑动分页查询(滑动到底部时,自动查询下一页,直到没有更多数据)
2、可切换列表样式和网格样式
3、切换样式后,数据位置保持不变(如当前在第100条位置,切换样式后,位置不变)
4、footview根据查询状态,显示不同内容:
5、当查询出错时,再次点击footview,可重新发起请求(例如:网络异常了)
6、当切换网格样式时,footview应独占一行
虽然是简单案例,咱们开发时,也应先进行简单的设计,让各模块、各类都各司其职、逻辑解耦,这样大家学起来会更简单一些。
此处,不画类图了,直接根据项目结构,简单介绍一下吧:
1、pagedata 是指数据模块,包含:
2、pageMangage 是指分页管理模块,将分页的全部逻辑托管给该模块处理。为了简化分页逻辑的实现,根据功能单一性进行了简单拆分:
3、adapter 是指适配器模块,主要用于定义各类适配器
4、utils 是指工具模块,用于定义一些常用工具
在文章的最后,会将Demo源码下载地址分享给大家,以供参考。
1.1、DataInfo.kt 实体类
kotlin类中定义了属性,则已包含了默认的get、set
1.2、DataSearch 数据访问类:
DataSearch类有两个重点知识:
1.2.1、子线程异步查询的实现
1.2.2、数据回调监听
为了简化分页逻辑,让大家更好理解,此处将分页数据、分页布局拆分出来,使其逻辑解耦,也便于代码的管理维护。
2.1、PagesDataManager 分页数据管理类
主要内容,包括:
2.2、PagesLayoutManager 分页布局管理类
2.3、PagesManager 分页管理类
主要内容,包含:
主要技术点,包括:
3.1、PagesAdapter 分页适配器类
4.1、AppUtils 项目工具类
此案例中主要用于判断网络连接情况。
该类的主要技术点:Kotlin的共生对象、线程安全单例,详见源码:
5.1、MainActivity 主页面,用于显示分页列表、切换分页样式(列表样式、网格样式)
MainActivity的布局页面,使用了约束布局,层级嵌套少,且更简单一些:
5.2、item布局(列表样式),也是使用了约束布局:
5.3、item布局(网格样式),仍然使用了约束布局:
5.4、footview布局
比较简单,仅有一个文本控件:
分页实现难点汇总:
1、切换RecyclerView展示样式(列表样式、网格样式),保持数据位置不变
2、网格样式时,footview独占一行
3、直接在adapter中判断是否滑动到了底部,比常规做法(监听滑动坐标)更简单一些
4、分页状态管控(数据加载中、没有更多数据了、出错了点击重试)
Kotlin主要技术点汇总:
1、多线程实现(Lambda表达式的应用)
2、异步回调(Lambda表达式的应用、高阶函数)
3、共生对象
4、线程安全单例
5、其他略(都比较基础了,大家熟悉下即可)
此篇文章主要是为了讲解常规分页的实现,所以只是做了一些基础的拆分解耦,如果想在项目中使用,建议还是抽象一下,扩展性会更好一些(如:footview接口化扩展、数据查询接口化扩展等)。
如果有疑问,也欢迎留言咨询O(∩_∩)O~
Demo下载地址:
https://pan.baidu.com/s/1gH0Zcd0QXdm4mRNMqJgS8Q