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,框架寫死了佈局,只給了
設置圖標、
提示文字這些方法、字體等方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章