package com.shizhefei.test.view.adapters;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.shizhefei.mvc.IDataAdapter;
import com.shizhefei.recyclerview.HFAdapter;
import java.util.ArrayList;
import java.util.List;
/**
* Created by LuckyJayce on 2016/7/11.
*/
public abstract class ListDataAdapter<ITEM> extends HFAdapter implements IDataAdapter<List<ITEM>> {
private List<ITEM> datas = new ArrayList<ITEM>();
@Override
public abstract AbsItemViewHolder onCreateViewHolderHF(ViewGroup viewGroup, int type);
@Override
public final void onBindViewHolderHF(RecyclerView.ViewHolder vh, int position) {
@SuppressWarnings("unchecked")
AbsItemViewHolder holder = (AbsItemViewHolder) vh;
ITEM item = datas.get(position);
holder.setData(item, position);
}
@Override
public final void onViewAttachedToWindow(RecyclerView.ViewHolder vh) {
super.onViewAttachedToWindow(vh);
if (isHeader(vh) || isFooter(vh)) {
return;
}
AbsItemViewHolder holder = (AbsItemViewHolder) vh;
holder.onViewAttachedToWindow();
}
@Override
public final void onViewDetachedFromWindow(RecyclerView.ViewHolder vh) {
super.onViewDetachedFromWindow(vh);
if (isHeader(vh) || isFooter(vh)) {
return;
}
AbsItemViewHolder holder = (AbsItemViewHolder) vh;
holder.onViewDetachedFromWindow();
}
@Override
public int getItemCountHF() {
return datas.size();
}
@Override
public void notifyDataChanged(List<ITEM> items, boolean isRefresh) {
if (isRefresh) {
datas.clear();
datas.addAll(items);
notifyDataSetChangedHF();
} else {
datas.addAll(items);
notifyItemRangeInsertedHF(datas.size() - items.size(), items.size());
}
}
@Override
public List<ITEM> getData() {
return datas;
}
@Override
public boolean isEmpty() {
return datas.isEmpty();
}
private LayoutInflater inflater;
protected View inflate(int layoutId, ViewGroup viewGroup) {
if (inflater == null) {
inflater = LayoutInflater.from(viewGroup.getContext());
}
return inflater.inflate(layoutId, viewGroup, false);
}
protected abstract class AbsItemViewHolder extends RecyclerView.ViewHolder {
protected Context context;
public AbsItemViewHolder(View itemView) {
super(itemView);
this.context = itemView.getContext();
}
public View findViewById(int id) {
return itemView.findViewById(id);
}
public abstract void setData(ITEM item, int position);
protected void onViewDetachedFromWindow() {
}
protected void onViewAttachedToWindow() {
}
}
}