package com.cheikh.lazywaimai.ui.adapter.wrapper;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.cheikh.lazywaimai.R;
import com.cheikh.lazywaimai.base.BaseAdapter;
import com.cheikh.lazywaimai.base.BaseWrapperAdapter;
/**
* author: cheikh.wang on 16/12/27
* email: wanghonghi@126.com
* 修改至: http://blog.csdn.net/lmj623565791/article/details/51854533
*/
public class LoadMoreWrapperAdapter<T> extends BaseWrapperAdapter<T> {
private int mLoadMoreLayoutId;
private LoadMoreWrapperAdapter.LoadMoreHolder mLoadMoreHolder;
private boolean mLoading;
private boolean mEnableLoadMore;
private LoadMoreWrapperAdapter.OnLoadMoreListener mOnLoadMoreListener;
public LoadMoreWrapperAdapter(BaseAdapter<T> adapter) {
super(adapter);
mLoadMoreLayoutId = R.layout.layout_load_more_footer;
}
private boolean hasLoadMore() {
return mLoadMoreLayoutId != 0;
}
private boolean isShowLoadMore(int position) {
return hasLoadMore() && position >= mInnerAdapter.getItemCount();
}
@Override
public int getItemCount() {
return mInnerAdapter.getItemCount() != 0 ? mInnerAdapter.getItemCount() + 1 : 0;
}
@Override
public int getItemViewType(int position) {
return isShowLoadMore(position) ? ITEM_TYPE_LOAD_MORE : mInnerAdapter.getItemViewType(position);
}
@Override
public int getViewLayoutId(int viewType) {
return viewType == ITEM_TYPE_LOAD_MORE ? mLoadMoreLayoutId : mInnerAdapter.getViewLayoutId(viewType);
}
@Override
public RecyclerView.ViewHolder createViewHolder(View view, int viewType) {
if (viewType == ITEM_TYPE_LOAD_MORE) {
return new LoadMoreHolder(view);
} else {
return mInnerAdapter.createViewHolder(view, viewType);
}
}
@Override
public void bindViewHolder(RecyclerView.ViewHolder holder, T item, int position) {
if (isShowLoadMore(position) && holder instanceof LoadMoreHolder) {
resolveLoadMoreLogic((LoadMoreHolder) holder);
} else {
mInnerAdapter.bindViewHolder(holder, item, position);
}
}
private void resolveLoadMoreLogic(LoadMoreWrapperAdapter.LoadMoreHolder holder) {
mLoadMoreHolder = holder;
if (mEnableLoadMore && !mLoading) {
holder.loadingLayout.setVisibility(View.VISIBLE);
startLoadMore();
}
}
private void startLoadMore() {
mLoading = true;
if (mOnLoadMoreListener != null) {
mOnLoadMoreListener.onLoadMore();
}
}
public boolean isLoading() {
return mLoading;
}
public void finishLoadMore() {
if (mLoading) {
mLoading = false;
if (mLoadMoreHolder != null) {
mLoadMoreHolder.loadingLayout.setVisibility(View.GONE);
}
}
}
public void setOnLoadMoreListener(LoadMoreWrapperAdapter.OnLoadMoreListener loadMoreListener) {
if (loadMoreListener != null) {
mOnLoadMoreListener = loadMoreListener;
}
}
public void setEnableLoadMore(boolean enableLoadMore) {
mEnableLoadMore = enableLoadMore;
}
public static class LoadMoreHolder extends RecyclerView.ViewHolder {
public View loadingLayout;
public TextView loadingTxt;
public LoadMoreHolder(View itemView) {
super(itemView);
this.loadingLayout = itemView.findViewById(R.id.layout_loading);
this.loadingTxt = (TextView)itemView.findViewById(R.id.txt_loading);
}
}
public interface OnLoadMoreListener {
void onLoadMore();
}
}