package gueei.binding.viewAttributes.adapterView;
import java.lang.ref.WeakReference;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import gueei.binding.Binder;
import gueei.binding.ViewAttribute;
import gueei.binding.listeners.OnItemSelectedListenerMulticast;
public class SelectedObjectViewAttribute extends ViewAttribute<AdapterView<?>, Object> implements OnItemSelectedListener {
public SelectedObjectViewAttribute(AdapterView<?> view) {
super(Object.class, view, "selectedObject");
Binder.getMulticastListenerForView(view, OnItemSelectedListenerMulticast.class).register(this);
}
WeakReference<Object> selectedItem;
@Override
protected void doSetAttributeValue(Object newValue) {
if(getView()==null || getView().getAdapter()==null) return;
Object selected = getView().getSelectedItem();
Object o=null;
int pos = -1;
if( newValue != null ) {
int c = getView().getAdapter().getCount();
for( int i=0; i<c; i++ ) {
o = getView().getAdapter().getItem(i);
if( o == null )
continue;
if( o.equals(newValue)) {
pos = i;
break;
}
}
}
if( selected != null && o != null )
if(selected.equals(o))
return;
selectedItem = new WeakReference<Object>(newValue);
getView().setSelection(pos);
}
@Override
public Object get() {
if( selectedItem == null || selectedItem.get() == null)
return null;
return selectedItem.get();
}
int mPosition = -1;
public void onItemSelected(AdapterView<?> parent, View view, int pos,
long id) {
if( pos < 0 || pos > getView().getAdapter().getCount() )
return;
selectedItem = new WeakReference<Object>(getView().getAdapter().getItem(pos));
this.notifyChanged();
}
public void onNothingSelected(AdapterView<?> arg0) {
selectedItem=null;
this.notifyChanged();
}
}