package trikita.anvil;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import java.util.List;
public abstract class RenderableAdapter extends BaseAdapter {
private int currentPosition = -1;
public interface Item<T> {
void view(int index, T item);
}
public static <T> RenderableAdapter withItems(final List<T> items, final Item<T> r) {
return new RenderableAdapter() {
public int getCount() {
return items.size();
}
public T getItem(int pos) {
return items.get(pos);
}
public void view(int pos) {
r.view(pos, getItem(pos));
}
};
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
currentPosition = pos;
FrameLayout vg = new FrameLayout(parent.getContext());
Anvil.Mount m = new Anvil.Mount(vg, new Anvil.Renderable() {
public void view() {
RenderableAdapter.this.view(currentPosition);
}
});
Anvil.render(m);
vg.setTag(m);
v = vg;
} else {
Anvil.Mount m = (Anvil.Mount) v.getTag();
currentPosition = pos;
Anvil.render(m);
}
return v;
}
@Override
public long getItemId(int pos) {
return pos; // just a most common implementation
}
public abstract void view(int index);
}