package ren.solid.library.widget.loadmore;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
/**
* Created by _SOLID
* Date:2016/10/9
* Time:16:12
* Desc:用于RecyclerView加载更多的监听,实现滑动到底部自动加载更多
*/
public abstract class LoadMoreScrollListener extends RecyclerView.OnScrollListener {
private int previousTotal;
private boolean isLoading = true;
private LinearLayoutManager lm;
private StaggeredGridLayoutManager sm;
private int[] lastPositions;
private int totalItemCount;
private int lastVisibleItemPosition;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (recyclerView.getLayoutManager() instanceof LinearLayoutManager)
lm = (LinearLayoutManager) recyclerView.getLayoutManager();
else if (recyclerView.getLayoutManager() instanceof StaggeredGridLayoutManager) {
sm = (StaggeredGridLayoutManager) recyclerView.getLayoutManager();
lastPositions = sm.findLastVisibleItemPositions(null);
}
int visibleItemCount = recyclerView.getChildCount();
if (lm != null) {
totalItemCount = lm.getItemCount();
lastVisibleItemPosition = lm.findLastVisibleItemPosition();
} else if (sm != null) {
totalItemCount = sm.getItemCount();
lastVisibleItemPosition = lastPositions[0];
}
if (isLoading) {
if (totalItemCount > previousTotal) {//加载更多结束
isLoading = false;
previousTotal = totalItemCount;
} else if (totalItemCount < previousTotal) {//用户刷新结束
previousTotal = totalItemCount;
isLoading = false;
} else {//有可能是在第一页刷新也可能是加载完毕
}
}
if (!isLoading
&& visibleItemCount > 0
&& totalItemCount - 1 == lastVisibleItemPosition
&& recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) {
loadMore();
}
}
public abstract void loadMore();
}