Cajón de navegación para múltiples actividades

Tenía un problema al intentar hacer que mi cajón de navegación en Android fuera accesible desde todas las actividades. Tengo un NavigationDrawer.java:

public class NavigationDrawer extends Activity { static Context context; private DrawerLayout mDrawerLayout; private ExpandableListView mDrawerList; private LinearLayout navDrawerView; CustomExpandAdapter customAdapter; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; private CharSequence mTitle; private String[] mEventSelection; private String[] mProfileSelection; private int selectedPosition; List<SampleTO> listParent; HashMap<String, List<String>> listDataChild; ArrayList<Event> newsFeedList = new ArrayList<Event>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); context = this; mTitle = mDrawerTitle = getTitle(); navDrawerView = (LinearLayout) findViewById(R.id.navDrawerView); mEventSelection = getResources().getStringArray(R.array.event_array); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ExpandableListView) findViewById(R.id.nav_left_drawer); mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); listParent = new ArrayList<SampleTO>(); listDataChild = new HashMap<String, List<String>>(); listParent.add(new SampleTO(getString(R.string.eventDrawer), R.drawable.event)); listDataChild.put(getString(R.string.eventDrawer), Arrays.asList(mEventSelection)); customAdapter = new CustomExpandAdapter(this, listParent, listDataChild); mDrawerList.setAdapter(customAdapter); mDrawerList.setChoiceMode(ExpandableListView.CHOICE_MODE_SINGLE); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); } // Navigation drawer with sub menu goes here public void selectItem(int groupPosition, int position) { selectedPosition = position; mDrawerLayout.closeDrawer(navDrawerView); if (groupPosition == 0) { switch (selectedPosition) { case 0: break; case 1: break; } // Navigation item for event else if (groupPosition == 3) { switch (selectedPosition) { case 0: Intent eventMain = new Intent(context, EventMain.class); context.startActivity(eventMain); break; case 1: Toast.makeText(NavigationDrawer.this, "Analyze Event", Toast.LENGTH_LONG).show(); break; } } setTitle(mEventSelection[selectedPosition]); } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } @Override public void onResume() { super.onResume(); mDrawerList.setOnGroupClickListener(new OnGroupClickListener() { public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { int index = parent.getFlatListPosition(ExpandableListView .getPackedPositionForGroup(groupPosition)); parent.setItemChecked(index, true); String parentTitle = ((SampleTO) customAdapter .getGroup(groupPosition)).getTitle(); if (parentTitle.equals(getString(R.string.amenityDrawer))) { Toast.makeText(NavigationDrawer.this, "Amenity", Toast.LENGTH_LONG).show(); setTitle(parentTitle); mDrawerLayout.closeDrawer(navDrawerView); } return false; } }); mDrawerList.setOnChildClickListener(new OnChildClickListener() { public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { int index = parent.getFlatListPosition(ExpandableListView .getPackedPositionForChild(groupPosition, childPosition)); parent.setItemChecked(index, true); selectItem(groupPosition, childPosition); return false; } }); } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onPause() { super.onPause(); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { boolean drawerOpen = mDrawerLayout.isDrawerOpen(navDrawerView); return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { default: return super.onOptionsItemSelected(item); } } @Override public void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } 

}

Y luego navego a mi segunda clase que es EventMain.java cuando el sub ítem del cajón de navegación está seleccionado:

 public class EventMain extends NavigationDrawer { public static MapView mMapView = null; ArcGISTiledMapServiceLayer tileLayer; LocationManager locationManager; public static GraphicsLayer graphicsLayer = null; public static Callout callout; private int mYear, mMonth, mDay, mHour, mMinute; private Calendar c; static final int DATE_DIALOG_ID = 1; static final int TIME_DIALOG_ID = 2; private LinearLayout legendDiv, llNewsFeed, llSearch; private ListView listview; private Button btnNewsFeed, btnSearchAddr, btnLegends; private EditText searchAddrET; private ImageView ivEventGuide; public static LinearLayout directionDiv; public static TextView tvDirection, tvDirectionTitle, tvSearchTitle; static EventController eventCtrl = new EventController(); static Event eventModel = new Event(); private ListAdapter mAdapter; ArrayList<Event> newsFeedList = new ArrayList<Event>(); @Override public void onCreate(Bundle savedInstanceState) { ArcGISRuntime.setClientId("UkIVSWzquykoxCMG"); super.onCreate(savedInstanceState); setContentView(R.layout.event_main); context = this; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.event_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } 

Lo hizo muestra el icono del cajón de navegación en el EventMain.java. Sin embargo, cuando intento expandirlo, no funciona. ¿Algunas ideas?

Gracias por adelantado.

El diseño xml de mi EventMain:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:id="@+id/event_frame" android:layout_width="match_parent" android:layout_height="match_parent" > <com.esri.android.map.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" initExtent="21801.3, 25801.0, 33218.7, 44830.0" > </com.esri.android.map.MapView> //Other linear and relative layouts </FrameLayout> </LinearLayout> 

En el método setContentView() , setContentView() se llama después de la llamada al método super.onCreate() . Esto está causando el DrawerLayout establecido en la clase base, NavigationDrawer , para ser reemplazado, eliminando con eficacia el cajón. Para evitar esto, aseguramos que DrawerLayout tenga el contenedor estándar FrameLayout para el contenido principal, e infle el diseño de EventMain en eso.

El diseño de la actividad base, main.xml :

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/event_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> ... </android.support.v4.widget.DrawerLayout> 

Y en la subclase Activity, EventMain :

 @Override public void onCreate(Bundle savedInstanceState) { ... super.onCreate(savedInstanceState); ViewGroup content = (ViewGroup) findViewById(R.id.event_frame); getLayoutInflater().inflate(R.layout.event_main, content, true); ... } 
  • Animación de sugerencias de NavigationDrawer (como Google Currents)
  • Abra el cajón de navegación haciendo clic en el icono de la aplicación
  • Android: NavigationDrawer / múltiples actividades / mismo menú
  • El cajón de navegación no funciona en las versiones pre-ICS
  • LinearLayout $ LayoutParams no se puede convertir en android.support.v4.widget.DrawerLayout $ LayoutParams
  • ¿Cómo asociar el cajón de navegación al botón del arrastrador?
  • Detección del estado de la aplicación de currículum de diferentes android estado de navegación
  • Uso de syncState () en ActionBarDrawerToggle
  • Guardar estado de fragmentos con el cajón de navegación
  • NavigationDrawer desactivar el desplazamiento a la derecha
  • Lista plegable Elemento en la navegación Cajón
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.