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,框架写死了布局,只给了
设置图标、
提示文字这些方法、字体等方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值