Fragment系列(三)------RecyclerFragment之UI部分
来源:互联网 发布:网络监控网线传输距离 编辑:程序博客网 时间:2024/05/22 17:42
今天要介绍的是github上一个Android开源框架: android-starter-kit (Rx部分)
链接: https://github.com/qijitech/android-starter-kit
Fragment系列:
(一)View与Presenter
(二)NetworkFragment
(三)RecyclerFragment之UI部分
今天来讲讲 StarterRecyclerFragment
(用到了EasyRecyclerAdapter, 不熟悉的可以看看这篇文章)
先看定义:
public abstract class StarterRecyclerFragment<E extends Entity, PC extends PaginatorPresenter> extends StarterNetworkFragment<PaginatorContract<E>, PC> implements com.paginate.Paginate.Callbacks, SwipeRefreshLayout.OnRefreshListener
Entity相当于model层, PaginatorPresenter是一个处理分页加载的presenterr, 而PaginatorContract其实是对获取到的数据进行一个封装.
这个fragment的布局非常简单, 最外层FrameLayout, 里面是SwipeRefreshLayout, 最后是RecyclerView.
往下之前, 我想简单讲讲分页加载是个什么东西(知道的同学可以跳过)
这个fragment支持2种分页方式, 第一种是通过page
举个栗子, 客户端向服务器发送一个请求, 请求第1页的数据, 然后服务器返回数据;
之后客户端想加载第2页, 就会再向服务器请求第2页, 就这样3,4,5,6页……..下去.
当某一次, 服务器返回空, 那就说明全部数据已经给你了.
再说说第2种: 通过id
服务器会返回以id排序的一部分数据, 然后客户端可以把最后一个数据的id发给服务器, 请求这个id之后的更多数据.
这样直到服务器返回空, 就说明全部数据已经给你了.
继续看fragment
这里用到了一个类StarterFragConfig, 这个类就是用来存放一些配置信息.
例如recyclerView用什么layout, swipeRefreshLayout什么颜色, 用哪种分页方式等等. 感兴趣可以进入源码看看.
现在顺着生命周期看看
onCreate
构造了一个EasyRecyclerAdapter
根据建议, 开发者在这里应该调用buildFragConfig方法, 参数为StarterFragConfig, 建议通过builder构造.
buildFragConfig方法会配置recyclerViewAdapter的viewHolderFactory和bind, 然后把StarterFragConfig保存起来.
(后面为了方便, StarterFragConfig简称fragConfig)
onViewCreated
一, 找到swipeRefreshLayout和RecyclerView
二, 初始化RecyclerView, 就是通过fragConfig设置layoutManager等等
三, 这里通过一个叫Paginate的类, 来配置recyclerView的上拉加载更多.
首先判读fragConfig的canAddLoadingListItem
(canAddLoadingListItem就是指需要加载更多的时候,要不要显示一个进度)
如果为false, 跳过这一步.
用到了RecyclerPaginate类
RecyclerPaginate
先看内部变量:
private final RecyclerView recyclerView; //要处理的recyclerViewprivate final Callbacks callbacks; //这个接口包含3个方法, onLoadMore ,isLoading, hasLoadedAllItems, 这3个方法的实现都写在StarterRecyclerFragmentprivate final int loadingTriggerThreshold; //设置当底部还剩多少个没有显示出来的时候, 开始加载更多. 可以实现预加载private WrapperAdapter wrapperAdapter; //后面介绍private WrapperSpanSizeLookup wrapperSpanSizeLookup; //后面介绍
RecyclerPaginate构造过程:
1: recyclerView.addOnScrollListener(mOnScrollListener)
每一次滑动都会判断是否到达底部, 若到达底部, 再看是否正在刷新或者已经加载全部item,
注意: recyclerView的layoutManager只能是linear或staggerGrid
2: 如果canAddLoadingListItem为false, 跳过. 这一步配置加载更多的进度图的viewHolder.
WrapperAdapter继承RecyclerView.Adapter, 构造时候要传入原recyclerView的adapter和LoadingListItemCreator.
这个LoadingListItemCreator是个接口, 只有2个方法:
RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType);
void onBindViewHolder(RecyclerView.ViewHolder holder, int position);
还提供了一个默认实现.
这个wrapperAdapter实际上可以实现2种viewType, 当要显示正常viewType的时候, 调用原adapter; 要显示进度圈, 就调用LoadingListItemCreator.
3: 最后检查一下,现在的位置是否需要加载更多. 现在RecyclerPaginate构造结束.
回到onViewCreated
然后初始化swipeRefreshLayout
通过fragConfig设置ColorSchemeColors, 然后设置OnRefreshListener.
onRefresh()的操作比较简单, 还没refresh就开网络请求; 已经开了,就显示圈圈.
最后如果fragConfig有初始数据, 就add到adapter里面.
UI部分先讲到这里, 下一篇会讲网络部分.
- Fragment系列(三)------RecyclerFragment之UI部分
- Fragment系列(三)------RecyclerFragment之UI部分
- Fragment系列(四)------RecyclerFragment之网络部分
- Android Fragment系列学习笔记之三
- Fragment系列(三)
- Fragment系列解析之三---Fragment和Fragment、Activity之间传值
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建
- 多层fragment嵌套时 部分fragment的UI无法显示
- VSTO之旅系列(三):自定义Excel UI
- VSTO之旅系列(三):自定义Excel UI--转载
- UIPro实例讲解之QQ2014 UI模仿系列三
- Android系列之Fragment
- Android UI高级之Fragment
- Android中UI之Fragment
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之与其它Fragment通信
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之构建灵活的UI
- 开源中国源码学习UI篇(三)之ViewPager+Fragment的使用分析
- 自学Android之UI组件:(三)Fragment的基本使用(中)
- 版本管理之gitlab实践教程:基础篇(1)
- leetcode--561--Array Partition I(我的解法)
- Android线程—Executor框架
- sql server 游标使用
- hicharts 禁用版权信息及导出按钮
- Fragment系列(三)------RecyclerFragment之UI部分
- 【0003】删除文件时,提示操作无法完成,因为文件已在程序中打开?
- 网络基础---TCP(端口号,TCP段格式,常见定时器,握手与挥手)
- java nio(二)--创建和复制缓冲区
- DAY19 闭包函数和装饰器基础
- Fragment系列(四)------RecyclerFragment之网络部分
- java 代理demo
- 输入合法性判断
- ReactNative 的开发工具WebStorm破解版使用+React Native 终端常用命令