Meu código funciona perfeitamente: sempre que um item da Navegação é clicado, o item é selecionado.
É claro que quero iniciar o aplicativo com um fragmento padrão (página inicial), mas o Navigation Drawer não tem o item selecionado. Como posso selecionar esse item programaticamente?
public class BaseApp extends AppCompatActivity {
//Defining Variables
protected String LOGTAG = "LOGDEBUG";
protected Toolbar toolbar;
protected NavigationView navigationView;
protected DrawerLayout drawerLayout;
private DateManager db = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_layout);
navigationView = (NavigationView) findViewById(R.id.navigation_view);
// set the home/dashboard at startup
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, new DashboardFragment());
fragmentTransaction.commit();
setNavDrawer();
}
private void setNavDrawer(){
// Initializing Toolbar and setting it as the actionbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Initializing NavigationView
//Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
// This method will trigger on item Click of navigation menu
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
//Checking if the item is in checked state or not, if not make it in checked state
// I THINK THAT I NEED EDIT HERE...
if (menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
//Closing drawer on item click
drawerLayout.closeDrawers();
//Check to see which item was being clicked and perform appropriate action
switch (menuItem.getItemId()) {
//Replacing the main content with ContentFragment
case R.id.home:
DashboardFragment dashboardFragment = new DashboardFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, dashboardFragment,"DASHBOARD_FRAGMENT");
fragmentTransaction.commit();
return true;
[...]
Eu acho que preciso editar aqui:
if (menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
Ou na onCreate
inicialização do aplicativo com FragmentTransaction.
Obrigado pelo seu apoio.
android
navigation-drawer
sineverba
fonte
fonte
onNavigationItemSelected
ação para o ID selecionado?Respostas:
Use o código abaixo:
Chame esse método depois de ligar
setNavDrawer();
O
getItem(int index)
método obtém oMenuItem
então você pode chamar osetChecked(true);
em queMenuItem
, tudo o que estão a fazer é descobrir qual índice elemento faz o padrão tem, e substituir a 0 com esse índice.Você pode selecionar (destacar) o item chamando
Aqui está um link de referência: http://thegeekyland.blogspot.com/2015/11/navigation-drawer-how-set-selected-item.html
EDIT Não funcionou no nexus 4, revisão da biblioteca de suporte 24.0.0. Eu recomendo o uso
navigationView.setCheckedItem(R.id.nav_item);
respondida por @kingston abaixo.
fonte
setCheckedItem (int id)
.navigationView.post(new Runnable() { navigationView.setCheckedItem(...) })
- funcionou.Você também pode ligar para:
Este método foi introduzido na API 23.0.0
Exemplo
Nota:
android:checkableBehavior="single"
Veja também este
fonte
android:checkable="true"
mais, não será verificado por si próprio.navItemSelecteListener
o item selecionado após o retorno desse método.Para mim, esses dois métodos não funcionaram:
navigationView.getMenu().getItem(0).setChecked(true);
navigationView.setCheckedItem(id);
Experimente este, funciona para mim.
onNavigationItemSelected(navigationView.getMenu().findItem(R.id.nav_profile));
fonte
Exemplo ( NavigationView.OnNavigationItemSelectedListener ):
Tks
fonte
performIdentifierAction
e o que está acontecendoonNavigationItemSelected
. Para você, pode parecer simples, mas um desenvolvedor mais novo pode ter problemas para entender seu código.Sempre há problemas com as bibliotecas de suporte do Google, "ah, que ótimo!" Se você deseja verificar um item sem fazer o downgrade de sua versão das bibliotecas de suporte, defina checkable antes de definir o estado verificado.
Também pode funcionar se você definir checável nos arquivos xml do menu
fonte
Você pode destacar e selecionar o item com o seguinte alinhamento:
Fonte: https://stackoverflow.com/a/31044917/383761
fonte
A API 23 fornece o seguinte método:
No entanto, por algum motivo, essa função não causou a execução do código por trás do item de navegação. O método certamente destaca o item na gaveta de navegação, ou o 'verifica', mas não parece chamar o
OnNavigationItemSelectedListener
resultado em uma tela em branco na inicialização se a tela de inicialização depender das seleções da gaveta de navegação. É possível chamar manualmente o ouvinte, mas parece hacky:O código acima assume:
NavigationView.OnNavigationItemSelectedListener
em sua atividadenavigationView.setNavigationItemSelectedListener(this);
fonte
Você precisa chamar 2 funções para isso:
Primeiro: para extrair os comandos que você implementou no
onNavigationItemSelected
ouvinte:Segundo: para alterar o estado do item de menu da gaveta de navegação para selecionado (ou marcado):
Chamei as duas funções e funcionou para mim.
fonte
O código a seguir fará apenas o item de menu selecionado:
navigationView.setCheckedItem(id);
Para selecionar e abrir o item de menu, adicione o seguinte código após a linha acima.
onNavigationItemSelected(navigationView.getMenu().getItem(0));
fonte
Esta é a minha solução, muito simples.
Aqui está o meu arquivo menu.xml:
O menu acima destacará o primeiro item do menu. A linha abaixo fará algo (por exemplo: mostrar o primeiro fragmento, etc). NOTA: escreva depois de 'configurar o código da sua gaveta'
fonte
A maneira mais fácil é selecioná-lo no xml da seguinte maneira:
Observe a linha
android:checked="true"
fonte
Antes de tudo, crie cores para o item selecionado. Aqui https://stackoverflow.com/a/30594875/1462969 bom exemplo. Ajuda você a mudar a cor do ícone. Para alterar o plano de fundo de todos os itens selecionados, adicione seu arquivo values \ style.xml
Onde selectable_item_background deve ser declarado em drawable / selectable_item_background.xml
Onde a cor pode ser declarada em style.xml
E depois disso
Como você vê, usei este mainNavigationMenu_.getMenu (). FindItem (itemId) .setChecked (true); para definir o item selecionado. Aqui navegação
fonte
@color/state_list
código na sua resposta. Por curiosidade, onde você conseguiu a convenção de nomenclatura para colocar um sublinhado no final do nome da variável? Eu nunca vi essa abordagem.menuItem.getItemId()
vez deitemId
Ao usar
BottomNavigationView
as outras respostas, comonavigationView.getMenu().getItem(0).setChecked(true);
enavigationView.setCheckedItem(id);
não funcionará, a chamadasetSelectedItemId
funciona:fonte
Faça um seletor para o item individual da Gaveta Nav
Faça algumas alterações no seu NavigationView
fonte
em sua atividade (atrás da gaveta):
e
e no seu menu:
então o primeiro menu é realçado e exibido como menu padrão.
fonte
O código abaixo é usado para selecionar o primeiro item e realçar o primeiro item selecionado no menu.
fonte
você consegue fazer isso,
nav_view.getMenu().findItem(R.id.menutem).setChecked(true)
fonte
Por alguma razão, é preferível encontrar o MenuItem usando os IDs.
fonte