package by.istin.android.xcore.widget; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import java.util.List; public abstract class XArrayAdapter<T> extends ArrayAdapter<T> { private final int resource; public XArrayAdapter(Context context, int resource, T[] objects) { super(context, resource, objects); this.resource = resource; } public XArrayAdapter(Context context, int resource, List<T> objects) { super(context, resource, objects); this.resource = resource; } @Override public View getView(int position, View convertView, ViewGroup parent) { return createViewFromResource(position, convertView, parent, getResource(position)); } protected int getResource(int position) { return resource; } private View createViewFromResource(int position, View convertView, ViewGroup parent, int resource) { View view; T item = getItem(position); int viewTypeCount = getViewTypeCount(); if (convertView == null) { view = createView(parent, resource, position, item, parent); if (viewTypeCount > 0) { view.setTag(getItemViewType(position)); } } else { if (viewTypeCount > 0) { int itemViewType = getItemViewType(position); if (itemViewType != convertView.getTag()) { convertView = createView(parent, resource, position, item, parent); convertView.setTag(itemViewType); } } view = convertView; } bindView(position, item, view, parent); return view; } protected View createView(ViewGroup parent, int resource, int position, T item, ViewGroup viewGroup) { return View.inflate(parent.getContext(), resource, null); } protected abstract void bindView(int position, T item, View view, ViewGroup parent); }