Para aquellos que todavía usan SupportLibrary <25.3.0
No estoy seguro de si esta es una respuesta completa a esta pregunta, pero mi problema era muy similar: tuve que procesar la back
presión del botón y llevar al usuario a la pestaña anterior donde estaba. Entonces, tal vez mi solución sea útil para alguien:
private void updateNavigationBarState(int actionId){
Menu menu = bottomNavigationView.getMenu();
for (int i = 0, size = menu.size(); i < size; i++) {
MenuItem item = menu.getItem(i);
item.setChecked(item.getItemId() == actionId);
}
}
Por favor, tenga en cuenta que si el usuario presiona otra pestaña de navegación BottomNavigationView
, no se borrará el elemento seleccionado actualmente, por lo que debe llamar a este método onNavigationItemSelected
después del procesamiento de la acción de navegación:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.some_id_1:
// process action
break;
case R.id.some_id_2:
// process action
break;
...
default:
return false;
}
updateNavigationBarState(item.getItemId());
return true;
}
Con respecto al ahorro del estado de la instancia, creo que podría jugar con la misma action id
vista de navegación y encontrar una solución adecuada.
BottomNavigationView
no guarda ningún estado interno. Probablemente espere que esto se incluya en una actualización futura. Duplicar (con más información) aquí: stackoverflow.com/questions/40236786/…