package com.smartalk.gank.ui.widget; import android.content.Context; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; /** * 添加加载更多功能 * Created by panl on 15/12/31. */ public class LMRecyclerView extends RecyclerView { private boolean isScrollingToBottom = true; private FloatingActionButton floatingActionButton; private LoadMoreListener listener; public LMRecyclerView(Context context) { super(context); } public LMRecyclerView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public LMRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void applyFloatingActionButton(FloatingActionButton floatingActionButton) { this.floatingActionButton = floatingActionButton; } public void setLoadMoreListener(LoadMoreListener loadMoreListener) { this.listener = loadMoreListener; } @Override public void onScrolled(int dx, int dy) { isScrollingToBottom = dy > 0; if (floatingActionButton != null) { if (isScrollingToBottom) { if (floatingActionButton.isShown()) floatingActionButton.hide(); } else { if (!floatingActionButton.isShown()) floatingActionButton.show(); } } } @Override public void onScrollStateChanged(int state) { LinearLayoutManager layoutManager = (LinearLayoutManager) getLayoutManager(); if (state == RecyclerView.SCROLL_STATE_IDLE) { int lastVisibleItem = layoutManager.findLastCompletelyVisibleItemPosition(); int totalItemCount = layoutManager.getItemCount(); if (lastVisibleItem == (totalItemCount - 1) && isScrollingToBottom) { if (listener != null) listener.loadMore(); } } } public interface LoadMoreListener { void loadMore(); } }