Cambio entre la imagen de Android Navigation Drawer y Up caret cuando se utilizan fragmentos
Al usar el cajón de navegación, los desarrolladores de Android recomiendan que en la barra de acción "solo las pantallas que están representadas en el cajón de navegación deberían tener la imagen del cajón de navegación" y que "todas las demás pantallas tienen el carat tradicional".
Vea aquí para más detalles:http://youtu.be/F5COhlbpIbY
Estoy usando una actividad para controlar múltiples niveles de fragmentos y puedo obtener la imagen del cajón de navegación para mostrar y funcionar en todos los niveles.
Al crear fragmentos de nivel inferior puedo llamar alActionBarDrawerToggle
setDrawerIndicatorEnabled(false)
para ocultar la imagen del cajón de navegación y hacer que se muestre el cursor hacia arriba
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag, "lowerFrag").addToBackStack(null).commit();
El problema que tengo es que cuando vuelvo a los fragmentos de nivel superior, el quilate Arriba aún se muestra en lugar de la imagen original del cajón de navegación. ¿Alguna sugerencia sobre cómo "actualizar" la barra de acción en los fragmentos de nivel superior para volver a mostrar la imagen del cajón de navegación?
SoluciónLa sugerencia de Tom funcionó para mí. Esto es lo que hice:
Actividad principalEsta actividad controla todos los fragmentos en la aplicación.
Al preparar nuevos fragmentos para reemplazar otros, establezco el DrawerTogglesetDrawerIndicatorEnabled(false)
Me gusta esto:
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag).addToBackStack(null).commit();
A continuación, en una anulación deonBackPressed
, Revertí lo anterior configurando el DrawerToggle ensetDrawerIndicatorEnabled(true)
Me gusta esto:
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
En el LowerLevelFragmentsEn los fragmentos modifiqué.onCreate
yonOptionsItemSelected
Me gusta esto:
EnonCreate
adicionalsetHasOptionsMenu(true)
para habilitar la configuración del menú de opciones. También establecersetDisplayHomeAsUpEnabled(true)
para habilitar el< en la barra de acción:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// needed to indicate that the fragment would
// like to add items to the Options Menu
setHasOptionsMenu(true);
// update the actionbar to show the up carat/affordance
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
Entonces enonOptionsItemSelected
cuando el< se presiona se llama elonBackPressed()
desde la actividad para subir un nivel en la jerarquía y visualizar la imagen del cajón de navegación:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
switch (item.getItemId()) {
case android.R.id.home:
//called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
…
}