package gueei.binding.v30.actionbar.attributes; import java.util.ArrayList; import gueei.binding.BindingType; import gueei.binding.ViewAttribute; import gueei.binding.viewAttributes.ViewEventAttribute; import gueei.binding.exception.AttributeNotDefinedException; import gueei.binding.v30.BinderV30; import gueei.binding.v30.actionbar.BindableActionBar; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.FragmentTransaction; import android.widget.Adapter; public class TabNavigationAdapter extends ViewAttribute<BindableActionBar, Adapter> { public TabNavigationAdapter(BindableActionBar view) { super(Adapter.class, view, "TabNavigationAdapter"); } private Adapter mAdapter; private ActionBarTabAdapterBridge mBridge; @Override protected void doSetAttributeValue(Object newValue) { if (newValue instanceof Adapter){ mAdapter = (Adapter)newValue; setupTab(); } } /** Setup the tab for the action bar * */ private void setupTab() { ActionBar ab = getView().getActionBar(); mBridge = new ActionBarTabAdapterBridge(mAdapter); mBridge.rebind(ab); } @Override public Adapter get() { return mAdapter; } @Override protected BindingType AcceptThisTypeAs(Class<?> type) { if (Adapter.class.isAssignableFrom(type)){ return BindingType.OneWay; } return BindingType.NoBinding; } private class ActionBarTabAdapterBridge implements TabListener{ private final Adapter mAdapter; public ActionBarTabAdapterBridge(Adapter adapter){ mAdapter = adapter; } public void rebind(ActionBar bar){ // TODO: Check existing item int count = mAdapter.getCount(); bar.removeAllTabs(); for(int i=0; i<count; i++){ ActionBar.Tab tab = bar.newTab(); tab.setCustomView(mAdapter.getView(i, null, null)); tab.setTabListener(this); bar.addTab(tab, i); } } public void onTabReselected(Tab tab, FragmentTransaction ft) { } public void onTabSelected(Tab tab, FragmentTransaction ft) { int pos = tab.getPosition(); ArrayList<Object> initiators = new ArrayList<Object>(); initiators.add(TabNavigationAdapter.this); try { TabNavigationSelectedItem item = ((TabNavigationSelectedItem)BinderV30 .getAttributeForView(getView(), "tabNavigationSelectedItem")); item.set(mAdapter.getItem(pos), initiators); TabNavigationOnItemSelected selected = (TabNavigationOnItemSelected)BinderV30 .getAttributeForView(getView(), "tabNavigationOnItemSelected"); selected.invokeCommand(getView(), tab, ft); } catch (AttributeNotDefinedException e) { e.printStackTrace(); } } public void onTabUnselected(Tab tab, FragmentTransaction ft) { // TODO Auto-generated method stub } } }