Cómo implementar android Barra de herramientas Botón Atrás

Estoy utilizando una barra de herramientas personalizada. Necesito agregar el botón de nuevo a él. Ahora estoy usando este código para agregar el botón de nuevo.

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); toolbar.setBackgroundColor(getResources().getColor(R.color.white)); toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow)); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); 

Esto funciona bien. Puedo ver el botón de la parte posterior agregado. Pero considere el caso en el que estoy en Fragmento1 que no tiene botón de retroceso. Ahora me muevo a Fragment2 y agrego en el botón Atrás. Del Fragmento 2 abro el Fragmento 3 y agrego el botón de nuevo.

Ahora, cuando presiono el botón de vuelta de fragment3 para volver a fragment2 tengo que comprobar la Fragment Stack para ver si el botón de nuevo es necesario en el fragmento 2 o no.

¿Hay alguna otra forma de manejar el botón de retroceso automáticamente cuando empujamos fragmentos a la pila?

Usted puede manejar el icono trasero muy fácilmente. Si todos los fragmentos están en una sola actividad, realmente recomiendo manejar esto con la siguiente manera:

Primero crate una clase abstracta de BaseFragment que implemente FragmentManager .OnBackStackChangedListener luego ponga el siguiente método dentro de eso:

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mainActivity = (MainActivity) getActivity(); getFragmentManager().addOnBackStackChangedListener(this); shouldDisplayHomeUp(); } @Override public void onBackStackChanged() { shouldDisplayHomeUp(); } public boolean shouldDisplayHomeUp() { //Enable Up button only if there are entries in the back stack boolean canBack = false; try { canBack = getFragmentManager().getBackStackEntryCount() > 0; } catch (Exception ex) { // Log.e(getClass().getCanonicalName(), ex.getMessage());getMessage } if (canBack) { mainActivity.drawerDisable(); } else { mainActivity.drawerEnable(); } return canBack; } 

De esta manera disableDrawer & enableDrawer función manejar su Icono y OnBackPressed método manejar su BackStack Ahora en su actividad cuando presione la pantalla de nuevo icono si es necesario. Su onBackPressed debe ser algo como esto:

  int backStackCount = getSupportFragmentManager().getBackStackEntryCount(); if (backStackCount == 0) { //nothing exist in backStack OS handle it super.onBackPressed(); } else { getSupportFragmentManager().popBackStack(); } 

Ver la implementación completa aquí .

Sólo tienes que añadir dos nuevas líneas de código. Algo como esto

 Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); toolbar.setBackgroundColor(getResources().getColor(R.color.white)); toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow)); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); 

Esto supone que está utilizando un AppCompatActivity

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.tool_bar); // Attaching the layout to the toolbar object setSupportActionBar(toolbar); // enabling action bar app icon and behaving it as toggle button getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } 

Entonces en el onOptionsItemSelected puede anular el botón de inicio de la siguiente manera:

  @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(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } else if(id == android.R.id.home){ Intent i= new Intent(this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); finish(); return true; } return super.onOptionsItemSelected(item); } 
  • La barra de herramientas está oculta en la ventana de preferencias anidadas
  • Establecer el icono al final de la barra de herramientas
  • Obtención de la barra de herramientas en el fragmento
  • Implementación correcta de SearchView en la barra de herramientas de Android
  • Cómo hacer que AppBarLayout desaparezca por completo con windowTranslucentStatus establecido en true
  • Barra de herramientas de Android llena toda la pantalla
  • Cómo cambiar la barra de herramientas superior de Android
  • Desactivar la hamburguesa para animar la flecha hacia atrás en la barra de herramientas
  • ¿Debemos reemplazar la barra de acción por ToolBar?
  • Los subtítulos de la barra de herramientas no aparecen
  • ¿Es posible tener ScrollingViewBehavior combinado con el comportamiento de Snackbar?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.