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); }
}
- No se puede cambiar el color del icono del cajón de navegación en android
- Cajón de navegación de ambos lados izquierdo y derecho en una sola actividad
- Cajón de navegación Android Studio 1.4
- Teclado de navegación oculta el teclado cuando onDrawerOpened
- Cómo resolver tipos inconvertibles no puede lanzar "Android.support.v4.app.fragment" a "nombre de paquete"
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>
- Determinar si el NavigationDrawer está abriendo o cerrando
- Cómo ajustar el ancho del cajón de navegación en el estudio de Android
- Icono de Android ic_drawer.png en color blanco?
- ActionBarDrawerToggle no está configurando el Indicador de cajón
- ¿Cómo puedo añadir un elemento personalizado a un NavigationView con un diseño de menú?
- Cómo crear mini-menú de cajones en Android?
- Android: cajón de navegación sin xml
- Configurar el color de fondo del cajón de navegación
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); ... }
- Cómo usar Espresso + JMockit
- Inspeccionar elemento en Android sin necesidad de conectarlo a la computadora