Guardar BottomNavigationVer el elemento seleccionado durante la rotación de la pantalla

Usando ASL 25.0 BottomNavigationView estoy frente a algunos problemas, como un elemento seleccionado guardar (o su índice) y el elemento seleccionado por programación.

Desafortunadamente, hay muchas características que faltan en BottomNavigationView en esta etapa.

Su pregunta fue muy interesante y escribí este BottomNavigationView extendido que preserva el estado y, en su caso, guarda el último elemento seleccionado.

Aquí está la esencia del código

Esta extensión incluye:

  • Da a público dos métodos para establecer y obtener los elementos seleccionados mediante programación.
  • Guarda y restaura el estado sólo para la última selección.

Vamos a esperar hasta que los desarrolladores de ASL arreglen esto .

¡De acuerdo con Nikola!

Yo también creé mi propia esencia

Para guardar el estado después de la rotación que necesita agregar a usted Activity :

 @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt("opened_fragment", bottomNavigation.getCurrentItem()); super.onSaveInstanceState(outState); } 

Y en el método onCreate , justo después de configurar BottomNavigationView :

 final defaultPosition = 0; final int bottomNavigationPosition = savedInstanceState == null ? defaultPosition : savedInstanceState.getInt("opened_fragment", defaultPosition); bottomNavigation.setCurrentItem(bottomNavigationPosition); 

La mayor ventaja de esta esencia es: Hay pocos tipos de oyentes, que muestra la posición de selección anterior y los oyentes reaccionan incluso cuando la posición se establece mediante programación. Todo está escrito en enlace, use si necesita.

Estoy trabajando con BottomNavigationView y aquí está el código con el que la aplicación está funcionando correctamente en la rotación de la pantalla. En primer lugar, he creado una variable para mantener el ID del menú seleccionado
private int saveState;

Guardar el valor de id tomando el id de menú seleccionado en la variable

  @Override protected void onResume() { super.onResume(); navigation.setSelectedItemId(saveState); } @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); saveState = navigation.getSelectedItemId(); } 

A continuación, en el método onCreate que recupera el valor de id si está disponible

  if(savedInstanceState!=null){ navigation.setSelectedItemId(saveState); }else{ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.content, MapFragment.newInstance()); transaction.commit(); } 

BottomNavigationView es sólo un widget secundario. El estado de selección normalmente se definiría por la vista que contiene la página seleccionada, por ejemplo, un ViewPager. BottomNavigationView tiene una dependencia del estado de ViewPager que determina su propio estado. Por lo tanto, en su actividad utilizaría el estado restaurado de ViewPager para restaurar el estado BottomNavigationView. Por ejemplo:

 public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); final int selectedIndex = mViewPager.getCurrentItem(); final Menu bottomMenu = mBottomNavigationView.getMenu(); final MenuItem targetMenuItem = bottomMenu.getItem(selectedIndex); targetMenuItem.setChecked(true); } 

Yo estaba teniendo el mismo problema y lo que hice fue actualizar desde 25.0.1 a 25.3.1 y comenzó a funcionar correctamente sin la necesidad de ningún código adicional. Puede consultar el sitio web de Revisión de la Biblioteca de Soporte para obtener la versión más reciente.

Espero que ayude.

  • Cambiar la barra de herramientas y la barra de herramientas CollapsingToolbarLayout mediante programación
  • ¿Compartiendo NavigationView con todas las actividades?
  • Espacio en blanco debajo de CoordinatorLayout en DrawerLayout
  • Cómo configurar la elevación de un AppBarLayout mediante programación en la Biblioteca de soporte de Android v24.0.0?
  • Cambiar los iconos TabLayout a la izquierda, arriba, derecha o abajo en com.android.support:design:23.1.0
  • BottomNavigationView muestra los iconos y las etiquetas de texto en todo momento
  • Gráfica de Lollipop
  • Cómo autohide v7 appbar cuando scrollin lo oculta parcialmente - android
  • Vector Drawables bandera no funciona en la Biblioteca de Soporte 24+
  • InflateException con FloatingActionButton de la biblioteca de diseño oficial
  • CollapsingToolbarLayout con título multilínea
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.