Volver a seleccionar el elemento de menú NavigationView correcto después de pulsar el botón Atrás

Tengo una aplicación de Android que tiene un NavigationView con 4 fragmentos. Puedo navegar entre fragmentos vía el menú de la navegación y cuando selecciono otro fragmento, agregué el fragmento anterior en la pila trasera para proporcionar la funcionalidad posterior del botón.

Mi problema es que cuando presiono el botón de la parte posterior para ir al fragmento anterior, el NavigationView todavía muestra el fragmento viejo como el fragmento seleccionado. Si es posible, quiero actualizar la opción seleccionada como el fragmento en la pantalla.

Ejemplo:
Comienzo desde A y selecciono B desde NavigationView. La pantalla actual es B y NavigationView muestra el elemento seleccionado como B. Si presiono el botón Atrás, mi pantalla actual se convierte en A de nuevo, pero NavigationView muestra B como elemento seleccionado.

Aquí está mi método onNavigationItemSelected:

public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); HomeFragment fragment = null; Class type = null; switch (id) { case R.id.nav_home: type = HomeNavigationFragment.class; break; case R.id.nav_groups: type = GroupsNavigationFragment.class; break; case R.id.nav_profile: type = ProfileNavigationFragment.class; break; case R.id.nav_messages: type = MessageNavigationFragment.class; break; } fragment = HomeFragment.newInstance(mUser, type); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().replace(R.id.fragment_container, fragment).addToBackStack("fragment" + code++).commit(); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } 

Gracias.

One Solution collect form web for “Volver a seleccionar el elemento de menú NavigationView correcto después de pulsar el botón Atrás”

He arreglado mi problema con la sobrecarga onBackPressed de esta manera:

 @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { FragmentManager manager = getSupportFragmentManager(); if(manager.getBackStackEntryCount() > 0) { super.onBackPressed(); HomeFragment currentFragment = (HomeFragment) manager.findFragmentById(R.id.fragment_container); if(currentFragment instanceof HomeNavigationFragment){ mNavigationView.getMenu().getItem(0).setChecked(true); } else if(currentFragment instanceof GroupsNavigationFragment){ mNavigationView.getMenu().getItem(2).setChecked(true); } else if(currentFragment instanceof ProfileNavigationFragment){ mNavigationView.getMenu().getItem(1).setChecked(true); } else if(currentFragment instanceof MessageNavigationFragment){ mNavigationView.getMenu().getItem(3).setChecked(true); } } } } 
  • IllegalStateException: No se puede cambiar ID de contenedor del fragmento
  • Obtener el ancho y la altura de la pantalla en un fragmento
  • Cómo obtener todos los fragmentos sub / inner / anidados de un fragmento?
  • ¿Cómo cambiar la actividad en el botón de navegación inferior?
  • Alternativas a PreferenceFragment con android-support-v4
  • Ejemplo de trabajo completo del escenario de animación de tres fragmentos de Gmail?
  • Cómo reemplazar View Pager ver completamente con un nuevo Fragmento en Android
  • No se puede resolver el método getSupportActionBar () en fragmento
  • Agregue dinámicamente fragmento en fragmento
  • Android.app.Fragment $ InstantiationException: Tratando de instanciar una clase ScannerFragment que no es un fragmento
  • Fragmentos de Android en la API inferior
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.