package com.abewy.android.widget;
import java.util.ArrayList;
import java.util.List;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
public abstract class MultiTypeAdapter extends BaseAdapter implements Filterable
{
private List<Object> objects;
private int specialLayout;
private Filter filter;
public MultiTypeAdapter()
{
this(0);
}
public MultiTypeAdapter(int specialLayout)
{
super();
this.specialLayout = specialLayout;
objects = new ArrayList<Object>();
}
public int getCount()
{
if (objects != null)
return objects.size();
return 0;
}
public List<Object> getItems()
{
return new ArrayList<Object>();//objects//objects;
}
public Object getItem(int index)
{
if (index < objects.size())
return objects.get(index);
return null;
}
public Object getFirstItem()
{
return getItem(0);
}
public Object getLastItem()
{
return getItem(objects.size() - 1);
}
// @Override
public long getItemId(int position)
{
return position;
}
public int getItemPosition(Object object)
{
return objects.indexOf(object);
}
public void add(Object object)
{
objects.add(object);
// notifyDataSetChanged();
}
public void insert(Object object, int index)
{
objects.add(index, object);
// notifyDataSetChanged();
}
public void remove(Object object)
{
objects.remove(object);
notifyDataSetChanged();
}
public void removeAt(int index)
{
removeAt(index, false);
}
public void removeAt(int index, boolean animated)
{
if (index >= 0 && index < objects.size())
{
objects.remove(index);
notifyDataSetChanged();
}
}
public void clear()
{
clear(true);
}
public void clear(boolean notify)
{
objects.clear();
if (notify)
notifyDataSetChanged();
}
public void refill()
{
List<Object> list = new ArrayList<Object>();
list.addAll(objects);
objects.clear();
objects.addAll(list);
notifyDataSetChanged();
}
public void setData(List<Object> data)
{
objects = data;
notifyDataSetChanged();
}
@Override
public int getViewTypeCount()
{
/*ArrayList<Integer> types = new ArrayList<Integer>();
for (int i = 0; i < getCount(); i++)
{
Object object = getItem(i);
if (!types.contains(object.getItemViewType()))
types.add(object.getItemViewType());
}*/
return 1;//types.size() + 1;
}
@Override
public int getItemViewType(int position)
{
return 0;//getItem(position).getItemViewType();
}
@Override
public boolean areAllItemsEnabled()
{
return false;
}
@Override
public boolean isEnabled(int position)
{
return isSelectable(position, specialLayout);
}
protected abstract boolean isSelectable(int position, int specialLayout);
protected abstract View initViewForType(Object object, View convertView, ViewGroup parent, int specialLayout);
protected abstract View updateView(Object object, View convertView, int specialLayout);
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
Object object = getItem(position);
convertView = initViewForType(object, convertView, parent, specialLayout);
updateView(object, convertView, specialLayout);
return convertView;
}
@Override
public Filter getFilter()
{
return filter;
}
public void setFilter(Filter filter)
{
this.filter = filter;;
}
}