package v2.simpleUi; import java.util.List; import v2.simpleUi.util.ImageTransform; import v2.simpleUi.util.SimpleBaseAdapter; import v2.simpleUi.util.SimpleBaseAdapter.HasItsOwnView; import android.app.Activity; import android.content.Context; import android.view.MotionEvent; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.LinearLayout.LayoutParams; import android.widget.ListView; public abstract class M_ListView implements ModifierInterface { /** * is a duplicate of the original list */ private List<? extends HasItsOwnView> listToDisplay; public M_ListView() { } @Override public View getView(Context context) { // will make a copy of the list elements so that deleting etc and the // cancel wont affect the original list listToDisplay = loadList(); ListView v = new ListView(context) { @Override public boolean onTouchEvent(MotionEvent ev) { /* * block scolling of parents when the view is touched */ getParent().requestDisallowInterceptTouchEvent(true); return super.onTouchEvent(ev); } }; int size = (int) ImageTransform.dipToPixels(v.getResources(), getListHeigthInDip()); LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, size); int p = 5; lp.setMargins(2 * p, p, 2 * p, p); v.setLayoutParams(lp); v.setAdapter(new SimpleBaseAdapter((Activity) context, listToDisplay)); v.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> myAdapter, View itemView, int posInList, long mylng) { if (listToDisplay != null) ((HasItsOwnView) listToDisplay.get(posInList)).onItemClick( itemView, posInList); } }); v.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View itemView, int posInList, long arg3) { if (listToDisplay != null) return ((HasItsOwnView) listToDisplay.get(posInList)) .onItemLongClick(itemView, posInList); return false; } }); return v; } public abstract Integer getListHeigthInDip(); public abstract List<? extends HasItsOwnView> loadList(); @Override public boolean save() { return save(listToDisplay); } public abstract boolean save(List<? extends HasItsOwnView> updatedList); }