欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 中RecyclerView頂部刷新實(shí)現(xiàn)詳解

 更新時間:2017年10月13日 14:45:17   作者:ccpat  
這篇文章主要介紹了Android 中RecyclerView頂部刷新實(shí)現(xiàn)詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下

Android 中RecyclerView頂部刷新實(shí)現(xiàn)詳解

1. RecyclerView頂部刷新的原理

RecyclerView頂部刷新的實(shí)現(xiàn)通常都是在RecyclerView外部再包裹一層布局。在這個外層布局中,還包含一個自定義的View,作為頂部刷新時的指示View。也就是說,外層布局中包含兩個child,一個頂部刷新View,一個RecyclerView,頂部刷新View默認(rèn)是隱藏不可見的。在外層布局中對滑動事件進(jìn)行處理,當(dāng)RecyclerView滑動到頂部并繼續(xù)下滑的時候,根據(jù)滑動的距離決定頂部刷新View的顯示。當(dāng)滑動距離超過某個設(shè)定的值的時候,執(zhí)行頂部刷新操作。

2. RecyclerView頂部刷新的實(shí)現(xiàn)

RecyclerView頂部刷新的實(shí)現(xiàn)一般包含如下步驟。

  • 創(chuàng)建自定義的布局類,它可以繼承自已有的布局類,如LinearLayout,也可以直接繼承自ViewGroup。
  • 添加RecyclerView和頂部刷新View作為其child。
  • 重寫自定義的布局類的onMeasure(),onLayout(),dispatchTouchEvent(),onInterceptTouchEvent()等方法。

步驟3是其中最復(fù)雜的部分,需要在這些重寫的方法中,完成自身和child的測量,布局和滑動事件的處理。尤其是滑動事件的處理,需要對Android View的滑動機(jī)制有全面的了解才能實(shí)現(xiàn)。

Google在19.1之后的support library v4包中增加了SwipeRefreshLayout類。它繼承自ViewGroup,在它的內(nèi)部包含了一個CircleImageView對象作為頂部刷新View,同時它實(shí)現(xiàn)了上述步驟3的全部功能。將SwipeRefreshLayout和RecyclerView結(jié)合在一起,可以輕松的實(shí)現(xiàn)頂部刷新功能。

3.1 SwipeRefreshLayout用法

在介紹SwipeRefreshLayout和RecyclerView結(jié)合實(shí)現(xiàn)頂部刷新功能之前,先介紹下SwipeRefreshLayout的用法。

SwipeRefreshLayout最重要的兩個方法是:setOnRefreshListener()和setRefreshing()。

setOnRefreshListener()方法用來設(shè)置頂部刷新事件的監(jiān)聽,當(dāng)需要執(zhí)行頂部刷新時會調(diào)用此listener的onRefresh()方法,來獲取最新的數(shù)據(jù)。

setRefreshing()方法用來設(shè)置頂部刷新狀態(tài)。當(dāng)數(shù)據(jù)獲取完成后,需要調(diào)用此方法表示刷新完成。

除此之外,SwipeRefreshLayout還提供了一些方法用來設(shè)置頂部刷新View進(jìn)度條顏色,背景色等。

3.2 SwipeRefreshLayout結(jié)合RecyclerView實(shí)現(xiàn)頂部刷新

SwipeRefreshLayout結(jié)合RecyclerView實(shí)現(xiàn)頂部刷新功能非常簡單,只需要在SwipeRefreshLayout中包含一個RecyclerView作為其child即可??梢灾苯油ㄟ^XML文件來布局。

XML布局如下。

<android.support.v4.widget.SwipeRefreshLayout
  android:id="@+id/refresh_layout"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

  <android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>

為了方便使用,可以對這里的布局設(shè)置通過代碼進(jìn)行封裝,創(chuàng)建一個自定義的XSwipeRefreshLayout類來實(shí)現(xiàn)。代碼方式實(shí)現(xiàn)如下。由于布局非常簡單,代碼中就沒有引入布局文件了。

public class XSwipeRefreshLayout extends SwipeRefreshLayout {

  private RecyclerView mRecyclerView;
  public XSwipeRefreshLayout(Context context) {
    super(context);
    init(context);
  }

  public XSwipeRefreshLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
  }

  private void init(Context context) {
    mRecyclerView = new RecyclerView(context);
    addView(mRecyclerView);
  }
}

3.3 操作RecyclerView

對XML方式實(shí)現(xiàn)的頂部刷新,要操作RecyclerView只需要通過findViewById()找到對應(yīng)的RecyclerView對象,然后調(diào)用相應(yīng)的方法即可。

對代碼方式實(shí)現(xiàn)的頂部刷新,需要在XSwipeRefreshLayout中增加操作內(nèi)部RecyclerView的接口??梢杂袃煞N方式:一種是在XSwipeRefreshLayout中增加getRecyclerView()方法,返回內(nèi)部的RecyclerView對象,然后在外部調(diào)用RecyclerView對象的方法。另一種是XSwipeRefreshLayout中增加RecyclerView對應(yīng)的各種方法,然后透傳給內(nèi)部的RecyclerView對象。這兩種方式的示例代碼如下。

public class XSwipeRefreshLayout extends SwipeRefreshLayout {

  private RecyclerView mRecyclerView;
  public XSwipeRefreshLayout(Context context) {
    super(context);
    init(context);
  }

  public XSwipeRefreshLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
  }

  private void init(Context context) {
    mRecyclerView = new RecyclerView(context);
    addView(mRecyclerView);
  }

  public RecyclerView getRecyclerView() {
    return mRecyclerView;
  }
}

public class XSwipeRefreshLayout extends SwipeRefreshLayout {

  private RecyclerView mRecyclerView;
  public XSwipeRefreshLayout(Context context) {
    super(context);
    init(context);
  }

  public XSwipeRefreshLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
  }

  private void init(Context context) {
    mRecyclerView = new RecyclerView(context);
    addView(mRecyclerView);
  }

  public RecyclerView.Adapter getAdapter() {
    return mRecyclerView.getAdapter();
  }

  public void setAdapter(RecyclerView.Adapter adapter) {
    mRecyclerView.setAdapter(adapter);
  }

  public void setLayoutManager(RecyclerView.LayoutManager layout) {
    mRecyclerView.setLayoutManager(layout);
  }

  // 將需要用到的每個RecyclerView的方法都寫在這里
  .....
}

3. RecyclerView同時支持頂部刷新和底部刷新

在實(shí)際的應(yīng)用中,頂部刷新通常都需要和底部刷新一起使用。要讓RecyclerView同時支持頂部刷新和底部刷新,只需要將上述頂部刷新實(shí)現(xiàn)中的RecyclerView換成上一篇文章中XRecyclerView即可。

XML布局如下。

<android.support.v4.widget.SwipeRefreshLayout
  android:id="@+id/refresh_layout"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

  <cnx.ccpat.testapp.XRecyclerView
    android:id="@+id/recyclerview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </cnx.ccpat.testapp.XRecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>

對應(yīng)的代碼方式實(shí)現(xiàn)如下。

public class XSwipeRefreshLayout extends SwipeRefreshLayout {

  private XRecyclerView mRecyclerView;
  public XSwipeRefreshLayout(Context context) {
    super(context);
    init(context);
  }

  public XSwipeRefreshLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
  }

  private void init(Context context) {
    mRecyclerView = new XRecyclerView(context);
    addView(mRecyclerView);
  }
}

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Android布局——Preference自定義layout的方法

    Android布局——Preference自定義layout的方法

    PreferenceActivity是一個方便設(shè)置管理的界面,但是對于界面顯示來說比較單調(diào),所以自定義布局就很有必要了,下面與大家分享下Preference中自定義layout的方法
    2013-06-06
  • android仿知乎標(biāo)題欄隨ScrollView滾動變色

    android仿知乎標(biāo)題欄隨ScrollView滾動變色

    這篇文章主要為大家詳細(xì)介紹了android仿知乎標(biāo)題欄隨ScrollView滾動變色,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android中Canvas的常用方法總結(jié)

    Android中Canvas的常用方法總結(jié)

    在Android自定義View的時候,我們經(jīng)常需要繪制一些自己想要的效果。這里就需要使用Canvas對象。下面這篇文章將Canvas對象常用方法做個筆記,方便自己和大家以后使用的時候查閱,下面來一起看看吧。
    2016-09-09
  • Android?App跳轉(zhuǎn)微信小程序踩坑實(shí)戰(zhàn)

    Android?App跳轉(zhuǎn)微信小程序踩坑實(shí)戰(zhàn)

    現(xiàn)在市面上很多的應(yīng)用都可以實(shí)現(xiàn)相互跳轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于Android?App跳轉(zhuǎn)微信小程序踩坑的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Android中DialogFragment自定義背景與寬高的方法

    Android中DialogFragment自定義背景與寬高的方法

    DialogFragment 彈出框默認(rèn)是在屏幕的中央,左右還有留白,那么如何自定義背景和寬高呢?下面這篇文章就來給大家介紹了關(guān)于Android中DialogFragment自定義背景與寬高的方法,需要的朋友可以參考下。
    2017-08-08
  • Android仿微信選擇圖片和拍照功能

    Android仿微信選擇圖片和拍照功能

    這篇文章主要為大家詳細(xì)介紹了Android仿微信選擇圖片和拍照功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android四大組件之broadcast廣播使用講解

    Android四大組件之broadcast廣播使用講解

    Android開發(fā)的四大組件分別是:活動(activity),用于表現(xiàn)功能;服務(wù)(service),后臺運(yùn)行服務(wù),不提供界面呈現(xiàn);廣播接受者(Broadcast Receive),勇于接收廣播;內(nèi)容提供者(Content Provider),支持多個應(yīng)用中存儲和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫,本篇著重介紹廣播組件
    2022-12-12
  • Android UI設(shè)計系列之自定義TextView屬性實(shí)現(xiàn)帶下劃線的文本框(4)

    Android UI設(shè)計系列之自定義TextView屬性實(shí)現(xiàn)帶下劃線的文本框(4)

    這篇文章主要介紹了Android UI設(shè)計系列之自定義TextView屬性實(shí)現(xiàn)帶下劃線的文本框,具有一定的實(shí)用性和參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android如何添加控件監(jiān)聽器(三種方式)

    Android如何添加控件監(jiān)聽器(三種方式)

    本文主要介紹了Android如何添加控件監(jiān)聽器(三種方式),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Android實(shí)現(xiàn)價格走勢自定義曲線圖

    Android實(shí)現(xiàn)價格走勢自定義曲線圖

    本篇文章主要介紹了Android實(shí)現(xiàn)價格走勢曲線圖,非常具有實(shí)用價值,需要的朋友可以參考下
    2017-04-04

最新評論