package com.base.adapter;
import android.databinding.DataBindingUtil;
import android.support.annotation.LayoutRes;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.C;
import com.ui.main.BR;
import com.ui.main.R;
import java.util.ArrayList;
import java.util.List;
/**
* Created by baixiaokang on 16/12/27.
*/
public class CoreAdapter<M> extends RecyclerView.Adapter<BaseViewHolder> {
private TypeSelector<M> mTypeSelector;
private List<M> mItemList = new ArrayList<>();
public boolean isHasMore = true;
private List<Item> mHeadTypeDatas = new ArrayList<>();
private List<Item> mFootTypeDatas = new ArrayList<>();
private int viewType;
private Item mFooterItem;
private int mFooterViewType = R.layout.list_footer_view;
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new BaseViewHolder(DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), viewType, parent, false));
}
CoreAdapter() {
mFootTypeDatas.add(new Item(R.layout.list_footer_view, true));
}
@Override
public void onBindViewHolder(BaseViewHolder holder, int position) {
holder.mViewDataBinding.setVariable(BR.item, getItem(position));
holder.mViewDataBinding.executePendingBindings();
}
public void setViewType(@LayoutRes int type) {
this.viewType = type;
}
public void setTypeSelector(TypeSelector mTypeSelector) {
this.mTypeSelector = mTypeSelector;
this.viewType = C.FLAG_MULTI_VH;
}
public void addHeadViewType(@LayoutRes int i, Object data) {
mHeadTypeDatas.add(new Item(i, data));
}
public void addFooterViewType(@LayoutRes int i, Object data) {
mFootTypeDatas.add(mFootTypeDatas.size() - 1, new Item(i, data));
}
public Object getItem(int position) {
if (position < mHeadTypeDatas.size()) {
return mHeadTypeDatas.get(position).data;
} else if (position >= (mHeadTypeDatas.size() + mItemList.size())) {
int index = position - (mHeadTypeDatas.size() + mItemList.size());
if (mFootTypeDatas.get(index).type == mFooterViewType && !isHasMore) return false;
else return mFootTypeDatas.get(index).data;
} else {
return mItemList.get(position - mHeadTypeDatas.size());
}
}
@Override
public int getItemViewType(int position) {
if (position < mHeadTypeDatas.size()) {
return mHeadTypeDatas.get(position).type;
} else if (position >= (mHeadTypeDatas.size() + mItemList.size())) {
return mFootTypeDatas.get(position - (mHeadTypeDatas.size() + mItemList.size())).type;
} else {
return viewType == C.FLAG_MULTI_VH ?
mTypeSelector.getType((M) getItem(position)) :
viewType;
}
}
@Override
public int getItemCount() {
return mItemList.size() + mHeadTypeDatas.size() + mFootTypeDatas.size();
}
public void setBeans(List<M> data, int begin) {
if (data == null) data = new ArrayList<>();
this.isHasMore = data.size() >= C.PAGE_COUNT && (data.size() > 0 && begin > 0);
if (begin > 1) this.mItemList.addAll(data);
else this.mItemList = data;
notifyDataSetChanged();
}
public class Item {
int type;
Object data;
public Item(int type, Object data) {
this.type = type;
this.data = data;
}
}
}