package gueei.binding.v30.viewAttributes.absListView; import gueei.binding.Binder; import gueei.binding.ViewAttribute; import gueei.binding.v30.listeners.MultiChoiceModeListenerMulticast; import android.util.SparseBooleanArray; import android.view.ActionMode; import android.view.Menu; import android.view.MenuItem; import android.widget.AbsListView; import android.widget.ListView; /** * Set a null to the value to reset the list * TODO: implement programmatically change the selected positions * @author andy * */ public class ModalCheckedItemPositions extends ViewAttribute<ListView, SparseBooleanArray> implements AbsListView.MultiChoiceModeListener{ private boolean suppress = false; public ModalCheckedItemPositions(ListView view) { super(SparseBooleanArray.class, view, "modalCheckedItemPositions"); Binder.getMulticastListenerForView(view, MultiChoiceModeListenerMulticast.class).register(this); } @Override public SparseBooleanArray get() { if(getView()==null) return null; return Helper.cloneSBArray((getView().getCheckedItemPositions())); } @Override protected void doSetAttributeValue(Object newValue) { if(getView()==null) return; if (!(newValue instanceof SparseBooleanArray)){ getView().clearChoices(); } } public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } public boolean onCreateActionMode(ActionMode mode, Menu menu) { return false; } public void onDestroyActionMode(ActionMode mode) { } public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { if (suppress) { suppress = false; return; } this.notifyChanged(); } }