Estou usando o novo android.support.design.widget.BottomNavigationView
da biblioteca de suporte. Como posso definir a seleção atual do código? Percebi que a seleção é alterada de volta para o primeiro item, após girar a tela. É claro que também ajudaria, se alguém pudesse me dizer, como "salvar" o estado atual do BottomNavigationView
na onPause
função e como restaurá-lo onResume
.
Obrigado!
android
bottomnavigationview
Michael
fonte
fonte
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/…Respostas:
A partir da API 25.3.0, foi introduzido o método
setSelectedItemId(int id)
que permite marcar um item como selecionado como se tivesse sido tocado.Dos documentos:
Exemplo de código:
IMPORTANTE
Você DEVE já ter adicionado todos os itens ao menu (caso faça isso programaticamente) e definir o Listener antes de chamar setSelectedItemId (acredito que você deseja que o código em seu listener seja executado quando você chamar este método). Se você chamar setSelectedItemId antes de adicionar os itens de menu e definir o ouvinte, nada acontecerá.
fonte
onTabSelected
obviamente, ele não fará nada. Leia os documentos -> Definir o ID do item de menu selecionado. Isso se comporta da mesma forma que tocar em um item. É de desenvolvedores AndroidPara clicar programaticamente no item BottomNavigationBar que você precisa usar:
Isso organiza todos os itens com seus rótulos corretamente.
fonte
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: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étodoonNavigationItemSelected
após o processamento da ação de navegação: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.fonte
Menu menu = bottomNavigationView.getMenu();
retorna uma cópia do menu, portanto obottomNavigationView
objeto não é afetado?onde
action_item1
está o ID do item de menu.fonte
fonte
Agora é possível desde a versão 25.3.0 chamar
setSelectedItemId()
\ o /fonte
Adicione
android:enabled="true"
aos itens BottomNavigationMenu.E então defina
bottomNavigationView.setOnNavigationItemSelectedListener(mListener)
e defina como selecionado fazendobottomNavigationView.selectedItemId = R.id.your_menu_id
fonte
Isso provavelmente será adicionado nas próximas atualizações. Mas, enquanto isso, para conseguir isso, você pode usar a reflexão.
Crie uma visualização personalizada estendendo-se de BottomNavigationView e acesse alguns de seus campos.
E então use-o em seu arquivo de layout xml.
fonte
Apenas adicionando outra maneira de realizar uma seleção programaticamente - esta é provavelmente a intenção inicial ou talvez tenha sido adicionada posteriormente.
O
performIdentifierAction
leva umMenu
id de item e uma bandeira.Veja a documentação para mais informações.
fonte
Parece estar corrigido no SupportLibrary 25.1.0 :) Edit: Parece estar corrigido, que o estado da seleção é salvo, ao girar a tela.
fonte
Acima da API 25 você pode usar setSelectedItemId (menu_item_id), mas na API 25 você deve fazer diferente, Menu do usuário para obter o manipulador e então setChecked para item específico verificado
fonte
Use isto para definir o item de menu de navegação inferior selecionado por id de menu
fonte
I você não deseja modificar seu código. Nesse caso, recomendo que você experimente BottomNavigationViewEx。
Você só precisa substituir, chamar um método
setCurrentItem(index);
egetCurrentItem()
。fonte
usar
fonte
Eu fiz um bug no Google sobre o fato de que não há uma maneira confiável de selecionar a página em um BottomNavigationView: https://code.google.com/p/android/issues/detail?id=233697
NavigationView aparentemente tinha um problema semelhante, que eles corrigiram adicionando um novo método setCheckedItem ().
fonte
Você pode tentar o método performClick:
fonte
O único 'menos' da solução é usar
MenuItemImpl
, que é 'interno' à biblioteca (embora público).fonte
SE VOCÊ PRECISA PASSAR DINAMICAMENTE ARGUMENTOS DE FRAGMENTO FAÇA ISTO
Há muitas respostas (a maioria repetidas ou desatualizadas) aqui, mas nenhuma delas lida com uma necessidade muito comum: passar dinamicamente diferentes argumentos para o Fragment carregado em uma guia .
Você não pode passar dinamicamente argumentos diferentes para o Fragment carregado usando
setSelectedItemId(R.id.second_tab)
, o que acaba chamando o estáticoOnNavigationItemSelectedListener
. Para superar essa limitação, acabei fazendo isso no meuMainActivity
que contém as guias:O
ArticleFragment.newInstance()
método é implementado como de costume:fonte
Eu espero que isso ajude
É mais para determinar o fragmento padrão carregado ao mesmo tempo com o item de menu de navegação inferior correspondente. Você pode incluir o mesmo em seus retornos de chamada OnResume
fonte
Este método funciona para mim.
fonte
A reflexão é má ideia.
Vá para esta essência . Existe um método que realiza a seleção, mas também invoca o retorno de chamada:
fonte
callOnClick()
vez deperformClick()
, desta forma, não preciso desativar o som, que não funcionou deperformClick()
qualquer maneira.