打造Android万能上拉下拉刷新框架--XRefreshView(三)
来源:互联网 发布:mac收藏网页 编辑:程序博客网 时间:2024/06/06 04:13
转自:http://blog.csdn.net/footballclub/article/details/46982115
XRefreshView更新说明
这段时间一直有朋友给我反馈,让我帮忙解决问题,我汇总了下,有以下几种:
1. 处理listview滑动删除与XRefreshView的冲突
2. 处理viewpager和XRefreshView的冲突
3. listview滑动到底部自动加载更多
4. 刷新时,不让里面的listview上下滑动
5. 自定义headerview和footerview
6. 配置自定义头部广告位
除了广告位的都已经完成了。除此之外,我还对默认的header和footer做了ui上的优化,特别地,鉴于Recylerview的强大,我还针对Recylerview做了特别的适配,接下来先看效果图,在模拟器上录的,有点卡卡的。
效果图
更新详细
1.处理横向移动与XRefreshView的冲突
如果需要在手指横向移动的时候,让XRefreshView不拦截事件,
- 1
- 1
可以调用setMoveForHorizontal并传入true即可。
2.滑动到底部自动加载更多
目前只做了Abslistview和Recylerview的
- 1
- 1
true会自动加载更多,false则相反。传入false的话,如果是listview,需要上拉才能加载更多,如果是Recylerview,则会需要点击才能加载更多。就像这样
点击加载更多涉及到自定义footerview,到后面再说,这里先放着。
3.刷新时,不让里面的列表上下滑动
如果刷新时不想让里面的列表滑动,可以这么设置
- 1
- 1
4.支持按钮点击开始刷新
XRefreshView不仅支持手势下拉刷新,也支持按钮点击开始刷新,
- 1
- 1
可以在activity的onResume()中调用,也可以在按钮的点击事件中调用。
5.设置Abslistview和Recylerview的滚动监听事件
如果你有设置Abslistview和Recylerview滚动监听事件的需要的话,就不能直接使用Abslistview和Recylerview的setOnScrollListener方法了,因为为了实现自动加载更多的功能,监听已经被XRefreshView使用了,所以这时候需要使用XRefreshView提供的设置滚动监听的方法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
6.设置加载更多
如果希望在加载更多数据的时候,能在没有新数据的时候,隐藏footerview的话,
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
当调用xRefreshView.setLoadComplete(true)以后,就会隐藏footerview;如果过段时间又有新的数据了,可以调用xRefreshView.setLoadComplete(false),这样就又可以正常加载更多了。
7.其他一些属性的设置
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
8.XRefreshView提供的监听
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
9.自定义header和footer
9.1.自定义header
实现IHeaderCallBack接口,并继承View就可以自定义headerview了
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
这里需要介绍下几种headerview的状态
XRefreshView提供了不同状态的回调,方便开发者根据状态来改变headerview的显示,同时为了提供更加强大的支持,XRefreshView提供了onHeaderMove(double offset, int offsetY)回调来返回当前headerview移动的信息,这样能够更加自由的定制headerview。在继承了View并实现了IHeaderCallBack接口以后,需要调用下面这个方法来设置自定义headerview
- 1
- 1
9.2.自定义footer
自定义footer和自定义header类似,都同样要实现接口,自定义footer要实现 IFooterCallBack接口
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
footerview的状态流程分成两种
1.当到达底部自动加载更多:
1.1.还有更多数据
refreshing–>finish–>refreshing
1.2.已无更多数据
refreshing–>finish–>complete
2.当到达底部不自动加载更多:
2.1.还有更多数据
ready–>refreshing–>finish–>refreshing
2.2.已无更多数据
ready–>refreshing–>finish–>complete
其中,当不是到达底部自动加载更多的时候,需要自己写点击事件,就像这样:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
给footer设置点击事件,在点击事件中直接回调onLoadMore,并且进入刷新状态。
还有就是footer的show和hide方法不能向header那样:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
直接gone会给列表底部留下空白,所以应该这样
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
最后也需要通过下面这个方法来设置自定义footerview
- 1
- 2
- 1
- 2
10.Recylerview的Adapter
Recylerview的adapter必须继承自UltimateViewAdapter,具体用法可以参照demo中的SimpleAdapter,此外,给Recylerview设置自定义footerview和设置自定义headerview是不一样的,设置自定义headerview是通过XRefreshView来设置的,但是设置自定义footerview确是通过UltimateViewAdapter来设置的,具体如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
最后
XRefreshView托管于github,点此前往下载,欢迎start or fork。
参考的项目
在开发过程中有参考一些很不错的开源项目,分别是
- UltimateRecyclerView
- android-Ultra-Pull-To-Refresh
- 打造Android万能上拉下拉刷新框架--XRefreshView(三)
- 打造Android万能上拉下拉刷新框架--XRefreshView(三)
- 打造android万能上拉下拉刷新框架——XRefreshView (一)
- 打造android万能上拉下拉刷新框架——XRefreshView (一)
- 打造android万能上拉下拉刷新框架——XRefreshView (二)
- androidのXlist框架上拉下拉刷新案例
- 打造Android万能下拉刷新上拉加载控件
- 打造Android万能下拉刷新上拉加载控件
- android 上拉刷新下拉加载更多的开源框架 XRefreshView
- XRecyclerView和万能baseeAdapter 实现上拉下拉刷新列表
- Android pulltorefresh上拉下拉刷新加载
- 基于Android-Ultra-Pull-To-Refresh封装的轻量级上拉下拉刷新框架
- ListView上拉下拉刷新
- UITableView上拉下拉刷新
- UITableableview上拉下拉刷新
- 上拉下拉刷新XListView
- 上拉下拉刷新(1)
- 上拉下拉刷新数据
- zhihu-spider开源项目的README.md
- C语言的单字符IO之getchar()和putchar()
- 高考机器人首秀未答满分 人工智能未知大于已知
- 字符串匹配小结
- 线程的控制
- 打造Android万能上拉下拉刷新框架--XRefreshView(三)
- Mybatis学习(4):Mybatis及PageHelper插件和easyUI实现分页
- Vim插件之vimwiki
- 人工智能实现简单的五子棋程序
- 决策树实现
- Reverse Singly LinkedList的方法探讨
- 在ssh中用struts2标签读取list数组集合
- C++之MYSQL的简介
- Angular2的一些快捷查看