package com.metis.base.widget.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.metis.base.widget.adapter.delegate.AbsDelegate;
import com.metis.base.widget.adapter.delegate.BaseDelegate;
import com.metis.base.widget.adapter.delegate.TypeLayoutProvider;
import com.metis.base.widget.adapter.holder.AbsViewHolder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* Created by gaoyunfei on 15/5/16.
*/
public abstract class DelegateAdapter extends RecyclerView.Adapter<AbsViewHolder> {
private Context mContext = null;
private List<BaseDelegate> mDataList = null;
public DelegateAdapter(Context context/*, List<? extends AbsDelegate> dataList*/) {
mContext = context;
mDataList = new ArrayList<BaseDelegate>();
}
@Override
public AbsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//DelegateType type = DelegateType.getDelegateTypeById(viewType);
final int layoutId = TypeLayoutProvider.getLayoutResource(viewType);
final View view = LayoutInflater.from(mContext).inflate(layoutId, null);
return onCreateAbsViewHolder(parent, viewType, view);
}
public abstract AbsViewHolder onCreateAbsViewHolder (ViewGroup parent, int viewType, View view);
@Override
public void onBindViewHolder(AbsViewHolder holder, int position) {
holder.bindData(mContext, getDataItem(position), this, position);
}
public List<BaseDelegate> getDataList () {
return mDataList;
}
public void addDataItem (BaseDelegate delegate) {
mDataList.add(delegate);
}
public void addDataItem (int position, BaseDelegate delegate) {
mDataList.add(position, delegate);
}
public void addDataList (Collection<? extends BaseDelegate> list) {
if (list == null) {
return;
}
mDataList.addAll(list);
}
public void addDataList (int position, Collection<? extends BaseDelegate> list) {
if (list == null) {
return;
}
mDataList.addAll(position, list);
}
public void setDataItem (int position, BaseDelegate delegate) {
mDataList.set(position, delegate);
}
public AbsDelegate removeDataItem (int position) {
return mDataList.remove(position);
}
public void removeDataItem (Object object) {
mDataList.remove(object);
}
public void clearDataList () {
mDataList.clear();
}
@Override
public int getItemCount() {
return mDataList.size();
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
public AbsDelegate getDataItem (int position) {
return mDataList.get(position);
}
@Override
public int getItemViewType(int position) {
return getDataItem(position).getDelegateType();
}
@Override
public void onViewDetachedFromWindow(AbsViewHolder holder) {
super.onViewDetachedFromWindow(holder);
holder.onViewDetachedFromWindow();
}
public boolean endWith (BaseDelegate delegate) {
if (mDataList == null || mDataList.isEmpty()) {
return false;
}
return mDataList.get(mDataList.size() - 1).equals(delegate);
}
}