ListViewに渡してるAdapterのコード。継承して使うけど
package net.miz_hi.smileessence.util;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public abstract class CustomListAdapter<T> extends BaseAdapter
{
// private T[] array;
private List<T> list;
private final Object lock = new Object();
private boolean canMotifyOnChange = true;
private Activity activity;
private LayoutInflater inflater;
private int capacity;
public CustomListAdapter(Activity activity, int capacity)
{
this.capacity = capacity;
this.list = new LinkedList<T>();
this.activity = activity;
this.inflater = LayoutInflater.from(activity);
}
public void addAll(Collection<T> collection)
{
synchronized (lock)
{
for (T element : collection)
{
if (list.contains(element))
{
list.remove(element);
}
list.add(element);
if (list.size() >= capacity)
{
break;
}
}
}
}
public void addFirst(T element)
{
synchronized (lock)
{
if (list.contains(element))
{
list.remove(element);
}
list.add(0, element);
if (list.size() >= capacity)
{
list.remove(list.size() - 1);
}
notifyAdapter();
}
}
public void addLast(T element)
{
synchronized (lock)
{
if (list.contains(element))
{
list.remove(element);
}
list.add(element);
notifyAdapter();
}
}
public void removeElement(T element)
{
synchronized (lock)
{
list.remove(element);
notifyAdapter();
}
}
public void clear()
{
synchronized (lock)
{
list.clear();
notifyAdapter();
}
}
public void notifyAdapter()
{
if (canMotifyOnChange)
{
new UiHandler()
{
@Override
public void run()
{
notifyDataSetChanged();
}
}.postAtFrontOfQueue();
}
}
public void forceNotifyAdapter()
{
synchronized (lock)
{
new UiHandler()
{
@Override
public void run()
{
notifyDataSetChanged();
}
}.post();
}
}
public void setCanNotifyOnChange(boolean notifyOnChange)
{
synchronized (lock)
{
this.canMotifyOnChange = notifyOnChange;
}
}
public boolean getCanNotifyOnChange()
{
synchronized (lock)
{
return canMotifyOnChange;
}
}
public Activity getActivity()
{
return activity;
}
@Override
public void notifyDataSetChanged()
{
synchronized (lock)
{
new UiHandler()
{
@Override
public void run()
{
CustomListAdapter.super.notifyDataSetChanged();
}
}.post();
}
}
@Override
public int getCount()
{
return list.size();
}
@Override
public Object getItem(int position)
{
synchronized (lock)
{
return list.get(position);
}
}
@Override
public long getItemId(int position)
{
return position;
}
public LayoutInflater getInflater()
{
return inflater;
}
@Override
public abstract View getView(int position, View convertedView, ViewGroup parent);
}