package im.actor.sdk.view.adapters;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.HashSet;
public abstract class HolderAdapter<V> extends BaseAdapter {
private HashSet<ViewHolder<V>> holders = new HashSet<ViewHolder<V>>();
private Context context;
protected HolderAdapter(Context context) {
this.context = context;
}
@Override
public abstract V getItem(int position);
@Override
public final View getView(int position, View convertView, ViewGroup parent) {
V obj = getItem(position);
ViewHolder<V> holder;
View view;
if (convertView == null || convertView.getTag() == null) {
holder = createHolder(obj);
view = holder.init(obj, parent, context);
view.setTag(holder);
holders.add(holder);
} else {
holder = (ViewHolder<V>) convertView.getTag();
view = convertView;
}
onBindViewHolder(holder, obj, position, context);
return view;
}
public void onMovedToScrapHeap(View view) {
if (view.getTag() instanceof ViewHolder) {
((ViewHolder) view.getTag()).unbind(false);
}
}
public void dispose() {
for (ViewHolder holder : holders) {
holder.unbind(true);
}
}
protected void onBindViewHolder(ViewHolder<V> holder, V obj, int position, Context context) {
holder.bind(obj, position, context);
}
protected abstract ViewHolder<V> createHolder(V obj);
}