package edu.vanderbilt.vm.guide.ui; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; import edu.vanderbilt.vm.guide.R; import edu.vanderbilt.vm.guide.container.Agenda; import edu.vanderbilt.vm.guide.util.GuideConstants; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.widget.ArrayAdapter; public class Navigator extends SherlockFragmentActivity { private static final String CHOOSER = "chooser"; private static final String MAP = "map"; private int mNavChoice = 0; private PlaceNavigatorFragment mPlaceNavFrag; private AgendaNavigatorFragment mAgendaNavFrag; private AgendaMapFrag mAgendaMapFrag; @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.navigator_main); // Setup Navigation on ActionBar final ActionBar actionBar = getSupportActionBar(); actionBar.setBackgroundDrawable(GuideConstants.OLD_GOLD); // Specify that a dropdown list should be displayed in the action bar. actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks( // Specify a SpinnerAdapter to populate the dropdown list. new ArrayAdapter( actionBar.getThemedContext(), android.R.layout.simple_list_item_1, android.R.id.text1, new String[]{ "Place to Place", "Through the Agenda" }), // Provide a listener to be called when an item is selected. new ActionBar.OnNavigationListener() { @Override public boolean onNavigationItemSelected( int position, long id) { // Take action here, e.g. switching to the // corresponding fragment. switchFragments(position, id); return true; } }); // Setup fragments FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction(); mAgendaMapFrag = AgendaMapFrag.newInstance(this, new Agenda()); mPlaceNavFrag = new PlaceNavigatorFragment(); mPlaceNavFrag.setGraphMapper(mAgendaMapFrag); mAgendaNavFrag = new AgendaNavigatorFragment(); mAgendaNavFrag.setGraphMapper(mAgendaMapFrag); ft.add(R.id.nav_map, mAgendaMapFrag, MAP); ft.add(R.id.nav_chooser, mPlaceNavFrag,CHOOSER); ft.commit(); } void setDisplayAgenda(Agenda a) { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.remove( fm.findFragmentByTag(MAP) ); ft.add(R.id.nav_map, AgendaMapFrag.newInstance(this, a), MAP); ft.commit(); } private void switchFragments(int position, long id) { mAgendaMapFrag.clearMap(); switch (position) { case 0: // Travel from Place to Place if (mNavChoice != 0) { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.remove( fm.findFragmentByTag(CHOOSER) ); ft.add(R.id.nav_chooser, mPlaceNavFrag, CHOOSER); ft.commit(); mNavChoice = 0; } return; case 1: // Travel through the Agenda if (mNavChoice != 1) { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.remove( fm.findFragmentByTag(CHOOSER) ); ft.add(R.id.nav_chooser, mAgendaNavFrag, CHOOSER); ft.commit(); mNavChoice = 1; } return; default: return; } } /** * Navigate to this Activity from another Activity. * * @param ctx */ public static void open(Context ctx) { Intent i = new Intent(ctx, Navigator.class); ctx.startActivity(i); } }