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.
- Android CollapsingToolbarLayout Título de fondo
- Configuración del comportamiento del botón de acción flotante mediante programación
- CoordinatorLayout + ActionBar + Fragmentos
- La vista no puede anclarse en el parámetro CoordinatorLayout principal
- Cómo implementar Bottom Sheets usando la nueva biblioteca de soporte de diseño 23.2
- NavigationView diapositiva desde la derecha
- Elementos de menú de la barra de herramientas apretados después de cambiar a la biblioteca de soporte 26 y AppBarActivity a AppCompatActivity
- AppBarLayout.setExpanded (boolean, true) animación extraña en la biblioteca de soporte 23.1.1
- Uso de BottomSheetBehavior con un CoordinatorLayout interno
- Problema con la biblioteca de asistencia de Android 23.2.1 AppBarLayout setExpanded
- Una vez más obtener java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.i después de actualizar a Herramientas de soporte 23
- Establecer layout_anchor en tiempo de ejecución en FloatingActionButton
- Android SupportLib - FrameLayout en CoordinatorLayout con AppBarLayout consumiendo toda la altura de la pantalla
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.
- Llamar a DialogFragment del fragmento
- Falló al crear tarea o tipo checkenv Causa El nombre es indefinido