Android RecyclerView分頁監聽底部狀態源碼

我在這里直接封裝成了一個類,直接上代碼:

/**
 * Recycler分頁
 *
 * @author http://www.lovecoder.cn/
 *         Created by haibo on 2016/7/28.
 */
public class RecyclerPageView extends RecyclerView {
    public RecyclerPageView(Context context) {
        super(context);
    }

    public RecyclerPageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public RecyclerPageView(Context context, @Nullable AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.addOnScrollListener(new MyOnScrollListener());
    }

    private class MyOnScrollListener extends RecyclerView.OnScrollListener {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            if (newState == SCROLL_STATE_IDLE) {
                LayoutManager layoutManager = getLayoutManager();
                if (getLayoutManager() instanceof StaggeredGridLayoutManager) {
                    StaggeredGridLayoutManager layout = (StaggeredGridLayoutManager) layoutManager;
                    // 獲取瀑布流有多少列
                    int column = layout.getColumnCountForAccessibility(null, null);
                    int positions[] = new int[column];
                    // 獲取lastItem的positions
                    layout.findLastVisibleItemPositions(positions);
                    for (int i = 0; i < positions.length; i++) {
                        /**
                         * 判斷lastItem的底邊到recyclerView頂部的距離
                         * 是否小于recyclerView的高度
                         * 如果小于或等于 說明滾動到了底部
                         */
                        if (positions[i] >= (layout.getItemCount() - column)
                                && layout.findViewByPosition(positions[i]).getBottom() <= getHeight()) {
                            Log.d("admin", "到底部了");
                            break;
                        }
                    }
                } else if (getLayoutManager() instanceof LinearLayoutManager) {
                    LinearLayoutManager layout = (LinearLayoutManager) layoutManager;
                    int position = layout.findLastVisibleItemPosition();
                    if (position - 1 == layout.getItemCount()
                            && layout.findViewByPosition(position).getBottom() <= getHeight()) {
                        Log.d("admin", "到底部了");
                    }
                }
            }
            super.onScrollStateChanged(recyclerView, newState);
        }
    }
}

如果感覺幫助到你了,趕快給個贊吧。哈哈
轉載請注明出處:http://www.lovecoder.cn/855.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,817評論 25 708
  • 前些日子從@張鑫旭微博處得一份推薦(Front-end-tutorial),號稱最全的資源教程-前端涉及的所有知識...
    谷子多閱讀 4,263評論 0 44
  • 大部分的后端會很很鄙視前端。我也不知道為什么,可能大部分人都會覺得腳本語言根本不算語言。 大多人 會叫我們切圖仔,...
    小黑的眼閱讀 3,381評論 0 15
  • 放學后,家長們7人準時來到學校教室。崔嘉誠爸爸媽媽一起來到了學校,(嘉誠媽媽還感冒了,帶病堅持,真的好感動)...
    肖睿媽媽閱讀 272評論 0 3
  • BD也要懂運營(九) 上期我們聊了基礎的運營思維和進階的運營思維,這期我們就運營思維中的杠桿化思維,來細說說作為一...
    不看菜譜的BD不是好BD閱讀 317評論 0 1