package mcxtzhang.recyclerviewdemo.generalizerv.base;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.util.Log;
import com.mcxtzhang.commonadapter.rv.HeaderRecyclerAndFooterWrapperAdapter;
import mcxtzhang.recyclerviewdemo.generalizerv.base.widget.LoadingFooter;
/**
* 介绍:封装的Rv
* 1 支持滑动到底部,自动触发加载更多操作,关联接口OnLoadMoreListener
* 2
* 作者:zhangxutong
* 邮箱:zhangxutong@imcoming.com
* 时间: 2016/10/31.
*/
public class ZRecyclerView extends RecyclerView {
private static final String TAG = "zxt/ZRecyclerView";
private Context mContext;
private HeaderRecyclerAndFooterWrapperAdapter mWrapperAdapter;//装饰Adapter
private LoadingFooter mFooter;
public ZRecyclerView(Context context) {
this(context, null);
}
public ZRecyclerView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public ZRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context) {
mContext = context;
mFooter = new LoadingFooter(context, new LoadingFooter.OnLoadErrorClickListener() {
@Override
public void onClick() {
//错误重试
if (null != mOnLoadMoreListener) {
mFooter.setState(LoadingFooter.State.Loading);
mOnLoadMoreListener.onLoadMore();
}
}
});
addOnScrollListener(new OnScrollToLastListener() {
@Override
public void onLastItemVisible() {
Log.e(TAG, "onLastItemVisible: ");
switch (mFooter.getState()) {
case Normal://正常状态,应该进入loading,同时回调加载更多接口
mFooter.setState(LoadingFooter.State.Loading);
Log.e(TAG, "加载更多");
if (null != mOnLoadMoreListener) {
mOnLoadMoreListener.onLoadMore();
}
break;
case Loading:
//啥也不干,
break;
case Error:
//啥也不干
break;
case End:
//啥也不干
break;
}
}
});
}
/**
* 重写setAdapter,扩展功能,+上footer。
*
* @param adapter
*/
@Override
public void setAdapter(Adapter adapter) {
if (!(adapter instanceof HeaderRecyclerAndFooterWrapperAdapter)) {
Log.e(TAG, "Error setAdapter: need the adapter instanceof HeaderRecyclerAndFooterWrapperAdapter!!!!!!");
return;
}
mWrapperAdapter = (HeaderRecyclerAndFooterWrapperAdapter) adapter;
super.setAdapter(adapter);
mWrapperAdapter.addFooterView(mFooter);
}
/**
* LoadMore接口
*/
public interface OnLoadMoreListener {
void onLoadMore();
}
private OnLoadMoreListener mOnLoadMoreListener;
public OnLoadMoreListener getOnLoadMoreListener() {
return mOnLoadMoreListener;
}
public ZRecyclerView setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
mOnLoadMoreListener = onLoadMoreListener;
return this;
}
/**
* Footer处理
*/
public void setFooterState(LoadingFooter.State state) {
mFooter.setState(state);
}
}