"Botón Atrás" mediante la barra de herramientas getSupportActionbar y appcompat v7

Estoy utilizando la nueva barra de herramientas de la biblioteca Appcompat V7 y estoy haciendo una aplicación con el cajón de navegación y con fragmentos.

En algunos fragmentos no quiero mostrar el icono de la hamburguesa sino la flecha en su lugar … Eso está bien, hice esto de esta manera:

mDrawerToggle.setDrawerIndicatorEnabled(false); mDrawerToggle.syncState(); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha); 

Mi pregunta es la siguiente: ¿Cómo o dónde necesito configurar el botón de inicio del teléfono o lo que necesito para escuchar el botón "Atrás"? Quiero llamar al método principal backpressed y volver atrás el icono del cajón de navegación con el icono de hamburguesa ..

Puedes hacerlo así:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); toolbar = (Toolbar)findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } setUpNavigationDrawer(); getFragmentManager().addOnBackStackChangedListener(backStackListener); // listen to the backstack of the fragment manager } 

Definir el onBackSTackChangedListener:

 private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { setNavIcon(); }; } 

Establecer el icono de acuerdo a su backstack fragmento:

 protected void setNavIcon() { int backStackEntryCount = getFragmentManager().getBackStackEntryCount(); drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0); } 

Detectar cuando se presiona el icono del cajón:

 public boolean onOptionsItemSelected(MenuItem item) { if (drawerToggle.isDrawerIndicatorEnabled() && drawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case x: return true; default: return false; } } 

Y manejar el botón de arriba:

 public boolean onSupportNavigateUp() { onBackPressed(); return true; } 

Esto funciona para mí. Buena suerte.

Agregue este método en onCreate() :

 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

A continuación, anule el onOptionItemSelected() como se onOptionItemSelected() continuación:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; default: return super.onOptionsItemSelected(item); } } 

No está seguro si esto funciona en el caso de OP, pero en muchos casos esta es probablemente la opción más simple para implementar el botón Atrás con la barra de herramientas de AppCompat.

Omita todas las setHomeButtonEnabled , setDisplayHomeAsUpEnabled y onOptionsItemSelected y los problemas relacionados .

En cambio, al inicializar la barra de herramientas, simplemente establezca 1) icono de navegación y 2) OnClickListener de navegación para ello:

 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); if (enableBackNavigation) { toolbar.setNavigationIcon(R.drawable.ic_back); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); } 

1- Crear el diseño de la Toolbar ;

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:local="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/dark_blue" android:minHeight="?attr/actionBarSize" local:popupTheme="@style/ThemeOverlay.AppCompat.Light" local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> 

2- Incluya esto en su diseño en el lugar donde desea que sea la toolbar de toolbar .

3- Pegue el siguiente código en su actividad. ( ActionBarActivity )

 private Toolbar mToolbar; //For Toolbar (Action bar) start mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); mToolbar.setNavigationIcon(R.drawable.ic_back_arrow); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); getSupportActionBar().setTitle("Event Details"); //For Toolbar (Action bar) end 

4- cambia el icono de clic de nuevo a lo que quieras.

Active el botón de retroceso:

 getActionBar().setDisplayHomeAsUpEnabled(enable); 

Y escuchar los clics en onBackPressed()

Obviamente, su actividad debe extender ActionBarActivity

Simplemente puede configurar el icono de navegación y asegúrese de que está configurando setNavigationOnClickListener() después de establecer setSupportActionBar(toolbar)

 toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back)); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); 
  • La vista de búsqueda no funciona desde la aplicación compat
  • No puedo conectar android-support-v7-appcompat a mi proyecto
  • Cómo utilizar android: Theme.Material (tema material) en styles.xml android?
  • Barra de herramientas flotante con Appcompat
  • Cómo reemplazar el color CheckBox con AppCompat
  • No contraer la barra de herramientas cuando RecyclerView se ajusta a la pantalla
  • Menú de desbordamiento textColor con AppCompat (usando la tecla de menú de hardware)
  • ¿Cómo setContentView antes de super.onCreate mientras se utiliza AppCompat v22.1.0?
  • ¿Cómo puedo configurar un tema diferente para el menú desplegable de un Spinner?
  • Barra de herramientas y TabLayout no son visibles en dispositivos Android 4.4
  • Error: no se pudo encontrar el destino con la cadena de hash 'android-21'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.