Para aqueles que ainda usam SupportLibrary <25.3.0
Não tenho certeza se esta é uma resposta completa para esta pergunta, mas meu problema era muito semelhante - eu tive que processar o back
pressionamento do botão e trazer o usuário para a guia anterior onde ele estava. Então, talvez minha solução seja útil para alguém:
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, tenha em mente que se o usuário pressionar outra guia de navegação BottomNavigationView
não limpará o item selecionado atualmente, então você precisa chamar este método onNavigationItemSelected
após o processamento da ação de navegação:
@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;
}
Em relação ao salvamento do estado da instância, acho que você poderia brincar com a mesma action id
visualização de navegação e encontrar uma solução adequada.
BottomNavigationView
não faz nenhum salvamento interno de estado. Provavelmente espera que isso seja incluído em uma atualização futura. Duplique (com mais algumas informações) aqui: stackoverflow.com/questions/40236786/…