package com.amlogic.tzr.charismatic_yichang.view;
import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import com.amlogic.tzr.charismatic_yichang.Tool.LoadFinishCallBack;
/**
* Created by zhaokaiqiang on 15/4/9.
*/
public class AutoLoadRecyclerView extends RecyclerView implements LoadFinishCallBack {
private onLoadMoreListener loadMoreListener;
private boolean isLoadingMore;
public AutoLoadRecyclerView(Context context) {
this(context, null);
}
public AutoLoadRecyclerView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AutoLoadRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
isLoadingMore = false;
setOnScrollListener(new AutoLoadScrollListener(true, true));
}
public void setLoadMoreListener(onLoadMoreListener loadMoreListener) {
this.loadMoreListener = loadMoreListener;
}
@Override
public void loadFinish() {
isLoadingMore = false;
}
public interface onLoadMoreListener {
void loadMore();
}
/**
* 滑动自动加载监听器
*/
private class AutoLoadScrollListener extends OnScrollListener {
private final boolean pauseOnScroll;
private final boolean pauseOnFling;
public AutoLoadScrollListener(boolean pauseOnScroll, boolean pauseOnFling) {
super();
this.pauseOnScroll = pauseOnScroll;
this.pauseOnFling = pauseOnFling;
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//由于GridLayoutManager是LinearLayoutManager子类,所以也适用
if (getLayoutManager() instanceof LinearLayoutManager) {
int lastVisibleItem = ((LinearLayoutManager) getLayoutManager()).findLastVisibleItemPosition();
int totalItemCount = AutoLoadRecyclerView.this.getAdapter().getItemCount();
//有回调接口,并且不是加载状态,并且剩下2个item,并且向下滑动,则自动加载
if (loadMoreListener != null && !isLoadingMore && lastVisibleItem >= totalItemCount -
2 && dy > 0) {
loadMoreListener.loadMore();
isLoadingMore = true;
}
}
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
// if (imageLoader != null) {
// switch (newState) {
// case 0:
// imageLoader.resume();
// break;
// case 1:
// if (pauseOnScroll) {
// imageLoader.pause();
// } else {
// imageLoader.resume();
// }
// break;
// case 2:
// if (pauseOnFling) {
// imageLoader.pause();
// } else {
// imageLoader.resume();
// }
// break;
// }
// }
}
}
}