package gueei.binding.plugin.abs.attributes; import gueei.binding.Binder; import gueei.binding.BindingType; import gueei.binding.ViewAttribute; import gueei.binding.plugin.abs.BindableActionBar; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.OnNavigationListener; import android.widget.Adapter; import android.widget.SpinnerAdapter; public class ListNavigationAdapter extends ViewAttribute<BindableActionBar, SpinnerAdapter> { public ListNavigationAdapter(BindableActionBar view) { super(SpinnerAdapter.class, view, "ListNavigationAdapter"); } private SpinnerAdapter mAdapter; @Override protected void doSetAttributeValue(Object newValue) { if (newValue instanceof SpinnerAdapter){ ActionBar bar = getHost().getActionBar(); bar.setListNavigationCallbacks((SpinnerAdapter)newValue, new NavigationListener()); mAdapter = (SpinnerAdapter)newValue; } } @Override public SpinnerAdapter get() { return mAdapter; } @Override protected BindingType AcceptThisTypeAs(Class<?> type) { if (SpinnerAdapter.class.isAssignableFrom(type)){ return BindingType.TwoWay; } if (Adapter.class.isAssignableFrom(type)){ return BindingType.OneWay; } return BindingType.NoBinding; } private class NavigationListener implements OnNavigationListener{ public boolean onNavigationItemSelected( int itemPosition, long itemId) { try { ListNavigationSelectedItem selectedItem = (ListNavigationSelectedItem)Binder.getAttributeForView(getView(), "listNavigationSelectedItem"); selectedItem.set(mAdapter.getItem(itemPosition)); ListNavigationOnItemSelected onItemSelected = (ListNavigationOnItemSelected)Binder.getAttributeForView(getView(), "listNavigationOnItemSelected"); onItemSelected.invokeCommand(getView(), itemPosition, itemId); } catch (Exception e) { e.printStackTrace(); } return true; } } public boolean onNavigationItemSelected(int position, long itemId) { try { ListNavigationSelectedItem selectedItem = (ListNavigationSelectedItem)Binder.getAttributeForView(getView(), "ListNavigationSelectedItem"); selectedItem.set(mAdapter.getItem(position)); ListNavigationOnItemSelected onItemSelected = (ListNavigationOnItemSelected)Binder.getAttributeForView(getView(), "ListNavigationOnItemSelected"); onItemSelected.invokeCommand(getView(), position, itemId); } catch (Exception e) { e.printStackTrace(); } return false; } }