Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> RecyclerView下拉刷新上拉加載(一)

RecyclerView下拉刷新上拉加載(一)

編輯:關於Android編程

前幾篇文章講過listview的自定義下拉刷新上拉加載,最近一直考慮再來個RecyclerView的下拉刷新和上拉加載,畢竟RecyclerView使用的越來越多了,扒了扒網上有關RecyclerView下拉刷新上拉加載的也有很多,不過大多數都滿足不了像listview上的那種刷新效果!為此,博主也是煞費苦心地思考了兩天,到底該怎樣做,才能讓RecyclerView的下拉刷新上拉加載像listview一樣666呢?

我們知道,listview自帶有addHeaderView和addFooterView,很隨意的添加頭尾布局,而且在重寫listview時監聽本身即可,但遺憾的是,RecyclerView並不像listview那樣方便的添加頭尾布局,所以問題就來了,想實現RecyclerView的下拉刷新和上拉加載必然要解決的一件事就是,如何隨意的給RecyclerView添加頭尾布局?

有的同學可能會說,RecyclerView通過適配器中的viewType添加header和footer不是很好辦的事情嗎?是的,拋開刷新不說,RecyclerView添加頭尾布局確實方便,但這個違背了自定義View的初衷,我們要的是像listview一樣重寫RecyclerView,而不需要任何其它條件,拿來即用,所以這個方法不可行!那還有什麼方法呢,博主思來想去,也就通過重寫線性布局LinearLayout,來順序添加headerview,RecyclerView,footerview最適合不過了,然後監聽LinearLayout的觸摸事件可達到效果!

好了,思路確定後,開始實現吧!

*重寫LinearLayout,並在構造方法中,inflate出headerview,RecyclerView,footerview,並依次添加!(步驟跟前幾篇的listview刷新相似);

*監聽觸摸事件,結合上幾篇listview的處理方法,監聽OnTouch,不過悲催的是,博主忘記了一點,現在重寫的是LinearLayout即一個ViewGroup,RecyclerView只是LinearLayout的一個子View,下拉時的效果還湊合,但是不松手再上滑時就悲催了,因為RecyclerView跟headerview和footerview並不像listview那樣是一體的,所以效果可想而知了,因此只監聽onTouch當然是不行的!

好吧,那現在我們還得把一把事件分發機制了。。。(事件分發機制,博主也不會細講,因為博主在迷迷糊糊的呢。萬一講錯了,你們削我咋弄?),上一張觸摸事件傳遞圖吧:

這裡寫圖片描述

對事件分發機制有點經驗的應該很容易看懂了,結合我們的項目,那麼在觸摸RecyclerView的事件傳遞就是:

觸摸RecyclerView:
->LinearLayout的dispatchTouchEvent
->LinearLayout的onInterceptTouchEvent
->RecyclerView的dispatchTouchEvent
->RecyclerView的onTouchEvent
->LinearLayout的onTouchEvent

關於事件分發機制不懂得同學可以自行百度了,注意一點,最小View是沒有onInterceptTouchEvent攔截事件的!

好了,事件分發弄通了,往下進行呗!但俗話說的好,不要重復發明輪子,呵呵,所以博主也參考了開源的pulltorefresh中的部分代碼(當然,大家在使用輪子的時候一定要搞懂原理,達到舉一反三地效果,切不可奉行糊裡糊塗的拿來主義),結合本項目中的RecyclerView完成了像listview那般的下拉刷新和上拉加載!

看下實現效果吧:

這裡寫圖片描述

布局代碼:




        

實現代碼:

   recyclerView = (PullRecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setOnHeaderRefreshListener(this);
        recyclerView.setOnFooterRefreshListener(this);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        myAdapter = new MyAdapter();
        recyclerView.setAdapter(myAdapter);

本例中沒有設置禁止下拉上拉的方法,大家可根據需要自行設置一個方法,在觸摸事件中判斷即可!當item數量不滿一屏時可以禁止上拉加載!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved