最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android中RecycleView添加下滑到底部的監(jiān)聽示例

 更新時間:2017年03月25日 17:11:30   作者:mingyunxiaohai  
本篇文章主要介紹了android中RecycleView添加下滑到底部的監(jiān)聽示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

我們的日常開發(fā)中經常用到下拉刷新,而網上評價最好的開源下拉刷新組件當然還是android-Ultra-Pull-To-Refresh 此組件可以給任何的控件添加下拉刷新功能。當然也包括recycleview了。

可惜android-Ultra-Pull-To-Refresh只是提供了下拉刷新的功能,但是對于列表類的組件,我們日常開發(fā)中更多的會用到其上拉加載或者滑到底部自動加載的功能,當然目前來看用戶更喜歡滑到底部自動加載的功能。就比如今天說的recycleview我們只能自己給其添加滑到底部加載更多的功能了。

那它的實現(xiàn)原理是神馬呢 非常簡單:

RecycleView內部有一個滑動監(jiān)聽的抽象類OnScrollListener來接收滾動事件,此類里面有兩個實現(xiàn)的方法

public abstract static class OnScrollListener {
    /**
     * Callback method to be invoked when RecyclerView's scroll state changes.
     *
     * @param recyclerView The RecyclerView whose scroll state has changed.
     * @param newState   The updated scroll state. One of {@link #SCROLL_STATE_IDLE},
     *           {@link #SCROLL_STATE_DRAGGING} or {@link #SCROLL_STATE_SETTLING}.
     */
    public void onScrollStateChanged(RecyclerView recyclerView, int newState){}

    /**
     * Callback method to be invoked when the RecyclerView has been scrolled. This will be
     * called after the scroll has completed.
     * <p>
     * This callback will also be called if visible item range changes after a layout
     * calculation. In that case, dx and dy will be 0.
     *
     * @param recyclerView The RecyclerView which scrolled.
     * @param dx The amount of horizontal scroll.
     * @param dy The amount of vertical scroll.
     */
    public void onScrolled(RecyclerView recyclerView, int dx, int dy){}
  }

通多源碼的注釋可以了解到

onScrollStateChanged 當recyclerview的滾動狀態(tài)發(fā)生變化的時候調用。

onScrolled 在布局可見和recycleview滾動的時候調用。

那么思路就是:

(1)在onScrollStateChanged 方法中判斷當前的滾動狀態(tài)是停止?jié)L動的狀態(tài)。

(2)然后根據api中的方法獲得最后可見的位置。

(3)判斷當前可見的recycleview中item的條數(shù)大于0

(4)判斷最后可見的位置大于數(shù)大于item總數(shù)減一

(5)并且item的總數(shù)大于可見的item 這樣可以保證超過一個界面的時候才執(zhí)行。

當滿足讓面的要求的時候我們就可以通過接口回調執(zhí)行我們的耗時邏輯 ,并顯示出加載的dialog。

因為RecyclerView可以通過layoutManager靈活的轉換成列表,表格,和瀑布流。尤其是瀑布流的時候,它的最后可見的位置是不一樣的,所以我們必須根據其不同的layoutManager狀態(tài)獲取相對應的最后可見位置。

代碼:

 @Override
  public void onScrollStateChanged(int state) {
    if (state == RecyclerView.SCROLL_STATE_IDLE && mLoadingListener != null) {
      LayoutManager layoutManager = getLayoutManager();
      int lastVisibleItemPosition;
      if (layoutManager instanceof GridLayoutManager) {
        lastVisibleItemPosition = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition();
      } else if (layoutManager instanceof StaggeredGridLayoutManager) {
        int[] into = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()];
        ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(into);
        lastVisibleItemPosition = findMax(into);
      } else {
        lastVisibleItemPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
      }
      if (layoutManager.getChildCount() > 0
          && lastVisibleItemPosition >= layoutManager.getItemCount() - 1 && layoutManager.getItemCount() > layoutManager.getChildCount()) {
          View footView = mFootViews.get(0);
        footView.setVisibility(View.VISIBLE);
        mLoadingListener.onLoadMore();
      }
    }
  }

我們可以通過api獲取瀑布流的所有的列 ,通過下面的方法找出最下面的一列。將加載的dialog顯示在此列的下面。

 private int findMax(int[] lastPositions) {
    int max = lastPositions[0];
    for (int value : lastPositions) {
      if (value > max) {
        max = value;
      }
    }
    return max;
  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android中判斷屏幕是否亮屏和是否解鎖功能

    Android中判斷屏幕是否亮屏和是否解鎖功能

    這篇文章主要介紹了Android中判斷屏幕是否亮屏和是否解鎖功能,需要的朋友可以參考下
    2017-02-02
  • Android開源框架的SlidingFragment的使用示例

    Android開源框架的SlidingFragment的使用示例

    今天小編就為大家分享一篇關于Android開源框架的SlidingFragment的使用示例,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Android開發(fā)中Eclipse報錯及對應處理方法總結

    Android開發(fā)中Eclipse報錯及對應處理方法總結

    這篇文章主要介紹了Android開發(fā)中Eclipse報錯及對應處理方法,實例匯總了使用eclipse開發(fā)Android項目過程中常見的錯誤提示及對應的處理技巧,需要的朋友可以參考下
    2015-12-12
  • 詳解關于AndroidQ獲取不到imsi解決方案

    詳解關于AndroidQ獲取不到imsi解決方案

    這篇文章主要介紹了詳解關于AndroidQ獲取不到imsi解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Android Fragment實現(xiàn)列表和內容聯(lián)動

    Android Fragment實現(xiàn)列表和內容聯(lián)動

    這篇文章主要為大家詳細介紹了Android Fragment實現(xiàn)列表和內容聯(lián)動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android短信發(fā)送器實現(xiàn)方法

    Android短信發(fā)送器實現(xiàn)方法

    這篇文章主要介紹了Android短信發(fā)送器實現(xiàn)方法,以實例形式較為詳細的分析了Android短信發(fā)送器從界面布局到功能實現(xiàn)的完整步驟與相關技巧,需要的朋友可以參考下
    2015-09-09
  • Android支付寶和微信支付集成

    Android支付寶和微信支付集成

    這篇文章主要為大家詳細介紹了Android支付寶和微信支付集成的相關資料,需要的朋友可以參考下
    2016-07-07
  • 親自動手編寫Android通用刷新控件

    親自動手編寫Android通用刷新控件

    這篇文章主要記錄了親自動手編寫Android通用刷新控件的詳細過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • android通過led實現(xiàn)手電筒功能

    android通過led實現(xiàn)手電筒功能

    這篇文章主要為大家詳細介紹了android通過led實現(xiàn)手電筒功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Android 顯示和隱藏軟鍵盤的方法(手動)

    Android 顯示和隱藏軟鍵盤的方法(手動)

    在Android開發(fā)中,經常會有一個需求,做完某項操作后,隱藏鍵盤,也即讓Android中的軟鍵盤不顯示。今天,和大家分享如何利用代碼來實現(xiàn)對Android的軟件盤的隱藏、顯示的操作
    2016-01-01

最新評論

蒙自县| 沈丘县| 上犹县| 宁晋县| 嘉兴市| 枞阳县| 东港市| 黔西| 育儿| 科技| 皮山县| 高陵县| 柳林县| 娱乐| 凤翔县| 简阳市| 广宁县| 福建省| 乌鲁木齐县| 周宁县| 广德县| 英超| 昭通市| 柳江县| 泉州市| 保定市| 双桥区| 孝感市| 赤峰市| 西峡县| 手游| 云林县| 阜宁县| 台江县| 上蔡县| 民乐县| 达孜县| 晋城| 岗巴县| 宁晋县| 赣榆县|