android-pulltorefesh快速开发框架的使用小结
在项目中需要支持刷新加载功能,如果你牛逼,你完全可以直接自己写一个自定义的控件,支持刷新,如果你是菜鸟,呵呵呵。。。那就用框架吧,其实框架就是别人写好的代码,提供了一种解决方法,我们只需要知道如何使用它,把数据放进去,获取。。。当然,有时间你可以看源码,大神是如何实现的。。。
框架是大神写的,但是大神也是人,也会有犯错的时候,可能错误不大,但是我们写项目就不能犯错,要不然老板干你。。。滚蛋。。。
在集成开源框架android-pulltorefesh,发现存在很多bug以及一些不满好的设计,做个总结吧,请不要吐槽。。。
导入项目:
https://github.com/chrisbanes/Android-PullToRefresh
这个项目比较老了,
README.md Update README to notify you of me no longer maintaining project 4 years ago
最近一次修改在4年前。
所以项目是ecplice做的,用ecplice导入。
4个文件:
library 库,最重要的
PullToRefreshListFragment 库 (依赖library)
PullToRefreshViewPager 库(依赖library)
LauncherActivity_sample 启动项目,需要上面3个库
ecplice导入有的时候报错,提示override
在实际应用中应该注意的一点就是:
在eclipse中,compiler 都得设置到1.6。这包括preference->Java->compiler 下要改成1.6, 同时,project里的build path 里jdk 也得改成1.6。 这主要是针对同时装了1.5, 1.6,而default is 1.5这种情况的。
http://blog.csdn.net/lxzo123/article/details/6451265
1、目前支持的view
ListView
ExpandableListView
GridView
WebView
ScrollView
HorizontalScrollView
ViewPager
没有RecycleView,蛋疼,如果项目需要,你可以自己写一个,模仿GridView。。。
2、发现的下拉刷新bug
1)
步骤:
PullToRefreshListView 下
设置支持同时支持上拉和下拉模式(设置图标旋转rotate),下拉刷新状态中在
没有刷新结束时将listview快速滑动到下面,不断的上拉。这个时候再滑动到 头部会发现一直在刷新,永远不会停止,除非你重新(上拉或者下拉)刷新,才会停止!!!
我的解决方法:
如果你项目要支持上拉下拉刷新,代码里面在上拉刷新时候,重新设置模式为只支持上拉,
在下拉时候,代码设置只支持下拉,
在刷新结束时候,重置,支持 上拉下拉刷新。
核心:
主要就是在一个刷新状态下(下拉),只有刷新结束,才可以再次另一种方式刷新(对应上拉)。
2)
设置图标旋转rotate模式,下拉刷新,再往上滑动,刷新view消失,再往下滑动,发现华为mate8手机下,rotate旋转图标不转动,停止了,就是说没有动画!!!
我的解决方法:rotate 旋转是用代码写的,可以修改库bug。
或者使用另一个动画效果,箭头,那这个旋转应该是xml写的旋转,不存在问题。
3)
刷新状态无法关闭,一直在刷新。。。
网上解决方案延迟执行刷新完成操作,太快了执行onRefreshComplete无效,真特么无语。。。
解决方法:
PullToRefreshListView 实现下拉或者上拉加载时候,可能在上拉 完成时候,调用onRefreshComplete方法去
停止 刷新操作,但是,可能无效,测试产生原因,刷新获取数据时候,时间太短,就会出现该问题
我们可以 延迟 1秒左右,在调用onRefreshComplete 方法,可以解决该问题
mListView.postDelayed(new Runnable() {
@Override
public void run() {
mListView.onRefreshComplete();
}
}, 1000);
记得是在 setadpter后面执行,不然 无效
源码:
@Override
protected String[] doInBackground(Void... params) {
// Simulates a background job.
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
}
return mStrings;
}
你特么延迟了4s,见鬼。。。
4)
web、gridview、scrollview (好像只有除了listview)。。。
mPullRefreshScrollView.setScrollingWhileRefreshingEnabled(true);
设置刷新时,支持滑动。但是发现滑动时候 头部或者底部刷新view还在,尼玛,屏幕本来就小,为什么不隐藏???
设置无效,只有
ptrListViewExtrasEnabled
针对 listview才起效果!!!!
5)
使用PullToRefreshListView 获取count 遇到的坑!!!!
favorite_listview = (PullToRefreshListView) findViewById(R.id.favorite_listView);
favorite_listview.setScrollingWhileRefreshingEnabled(true);
//刷新分页
favorite_listview.setMode(PullToRefreshBase.Mode.BOTH);
listview = favorite_listview.getRefreshableView();
发现listview中的 item
=0时候,count=0;
有1条的时候,
listview.getCount()打印
log
06-21 18:26:23.489 19267-19267/? D/FavoriteActivity: FavoriteActivity—listview—3 ;
2条—listview.getCount() =4 ;
那么代码设计应该是获取listview的count=0,
把头部、底部刷新view加载外层,不在listview中!!!
如果count>0,
把头部、底部分别加载
listview的第一行 和 最后一行(这就是为什么size多2个的原因,并且即使清空了listview.clear( ),头尾也不消失)
android.widget.FrameLayout:
头刷新view
FavoriteActivity—listview—android.widget.FrameLayout{ba1807c V.E…… ……ID 0,0-1062,0}
06-21 18:53:16.565 28916-28916/? D/FavoriteActivity: FavoriteActivity—listview—android.widget.LinearLayout{4d1ad05 V.E….L. …….. 0,0-1062,414 #7f0f0065 app:id/list_item}
尾部刷新view
06-21 18:53:16.566 28916-28916/? D/FavoriteActivity: FavoriteActivity—listview—android.widget.FrameLayout{6dc615a V.E…… ……ID 0,414-1062,414}
…….
解决方法:
模仿PullToRefreshListView,应该可以实现gridview刷新隐藏头部view
,后期试试吧~~~
框架可能还有其他问题,反正就是用到真正项目中,有很多问题出现,需要修复。。。
改啊。。。
3、各种属性设置(繁琐,草)
常用的一些属性:
ptr:ptrMode="both"
设置上拉和下拉都支持。
可选值为:disabled(禁用下拉刷新),
pullFromEnd(仅支持上拉刷新),
both(二者都支持), manualOnly(只允许手动触发)
也可以使用代码设置,在onCreate里面写:mPullRefreshListView.setMode(Mode.BOTH);//设置你需要的模式
设置图标
ptr:ptrDrawable="@drawable/ic_launcher"
设置下拉时候图标的动画
ptr:ptrAnimationStyle="flip" 倒置、ptr:ptrAnimationStyle="rotate"旋转
ptrRefreshableViewBackground
设置整个mPullRefreshListView的背景色
ptrHeaderBackground
设置下拉Header或者上拉Footer的背景色
ptrHeaderTextColor
用于设置Header与Footer中文本的颜色
ptrHeaderSubTextColor
用于设置Header与Footer中上次刷新时间的颜色
ptrShowIndicator
如果为true会在mPullRefreshListView中出现icon,
右上角和右下角,看着蛋疼。。。
ptrHeaderTextAppearance ,
ptrSubHeaderTextAppearance
分别设置拉Header或者上拉Footer中字体的类型颜色等等。
ptrRotateDrawableWhilePulling
当动画设置为rotate时,下拉时候是否旋转。
这个无法理解,搞不清,rotate就是让他旋转,
你特么还设置不转???
ptrScrollingWhileRefreshingEnabled
刷新的时候,是否允许ListView或GridView滚动
ptrListViewExtrasEnabled
决定了Header,Footer以何种方式
加入mPullRefreshListView,
true为headView方式加入,
就是滚动时刷新头部会一起滚动,
就是所刷新的view会隐藏,但是
这个只针对ListView有效果。
4、
想自定义刷新的view,使用自己的layout.xml,这个貌似无法实现,除非直接修改library,框架写死了布局,只给了
设置图标、
提示文字这些方法、字体等方法。
推荐阅读
-
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
-
iOS开发中使用UILabel设置字体的相关技巧小结
-
微信门户开发框架-使用指导说明书(2)--基于框架的开发过程
-
针对iOS开发的一些Xcode使用技巧小结
-
iOS开发中使用CoreLocation框架处理地理编码的方法
-
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
-
【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持
-
使用CSS框架布局的缺点和优点小结
-
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
-
一个基于 .NET Core 2.0 开发的简单易用的快速开发框架 - LinFx