package gueei.binding.viewAttributes.adapterView; import java.util.Collection; import android.database.DataSetObserver; import android.widget.AdapterView; import gueei.binding.Binder; import gueei.binding.IObservable; import gueei.binding.Observer; import gueei.binding.ViewAttribute; import gueei.binding.exception.AttributeNotDefinedException; import android.widget.Adapter; /** * Number of Item in the Adapter View * Returns AdapterView.getCount() * * @name itemCount * @widget AdapterView * @type Integer * @accepts Integer * @category list * @related * * @author andy */ public class ItemCountViewAttribute extends ViewAttribute<AdapterView<?>, Integer> { public ItemCountViewAttribute(AdapterView<?> view) { super(Integer.class, view, "itemCount"); try { adapterAttr = Binder.getAttributeForView(view, "adapter"); adapterAttr.subscribe(adapterObserver); lastAdapter = ((Adapter)adapterAttr.get()); onAdapterChanged((Adapter)adapterAttr.get()); } catch (AttributeNotDefinedException e) { e.printStackTrace(); throw new RuntimeException(e); } } private void onAdapterChanged(Adapter newAdapter){ if (lastAdapter!=null){ lastAdapter.unregisterDataSetObserver(dataSetObserver); } lastAdapter = newAdapter; if(lastAdapter!=null) lastAdapter.registerDataSetObserver(dataSetObserver); } private ViewAttribute<?,?> adapterAttr; private Adapter lastAdapter = null; private Observer adapterObserver = new Observer(){ @Override public void onPropertyChanged(IObservable<?> prop, Collection<Object> initiators) { onAdapterChanged((Adapter)adapterAttr.get()); initiators.add(this); notifyChanged(initiators); } }; private DataSetObserver dataSetObserver = new DataSetObserver(){ @Override public void onChanged() { super.onChanged(); notifyChanged(); } @Override public void onInvalidated() { super.onInvalidated(); notifyChanged(); } }; @Override protected void doSetAttributeValue(Object newValue) { // Readonly } @Override public Integer get() { if(getView()==null || getView().getAdapter()==null) return null; return getView().getAdapter().getCount(); } }