Mon code fonctionne parfaitement: chaque fois qu'un élément du tiroir de navigation est cliqué, l'élément est sélectionné.
Bien sûr, je veux démarrer l'application avec un fragment par défaut (home), mais le tiroir de navigation n'a pas l'élément sélectionné. Comment puis-je sélectionner cet élément par programme?
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;
[...]
Je pense que je dois modifier ici:
if (menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
Ou onCreate
au démarrage de l'application avec FragmentTransaction.
Merci pour votre soutien.
android
navigation-drawer
sineverba
la source
la source
onNavigationItemSelected
action pour l'ID sélectionné?Réponses:
Utilisez le code ci-dessous:
Appelez cette méthode après avoir appelé
setNavDrawer();
La
getItem(int index)
méthode obtient leMenuItem
puis vous pouvez l'appelersetChecked(true);
dessusMenuItem
, tout ce qu'il vous reste à faire est de trouver quel index d'élément possède la valeur par défaut et de remplacer le 0 par cet index.Vous pouvez sélectionner (mettre en surbrillance) l'élément en appelant
Voici un lien de référence: http://thegeekyland.blogspot.com/2015/11/navigation-drawer-how-set-selected-item.html
EDIT N'a pas fonctionné sur nexus 4, supporte la révision de la bibliothèque 24.0.0. Je recommande l'utilisation
navigationView.setCheckedItem(R.id.nav_item);
répondu par @kingston ci-dessous.
la source
setCheckedItem (int id)
.navigationView.post(new Runnable() { navigationView.setCheckedItem(...) })
- a fonctionné.Vous pouvez également appeler:
Cette méthode a été introduite dans l'API 23.0.0
Exemple
Remarque:
android:checkableBehavior="single"
Voir aussi ceci
la source
android:checkable="true"
, il ne sera pas vérifié par vous-mêmenavItemSelecteListener
car l'élément est sélectionné après le retour de cette méthode.Pour moi, ces deux méthodes n'ont pas fonctionné:
navigationView.getMenu().getItem(0).setChecked(true);
navigationView.setCheckedItem(id);
Essayez celui-ci, cela fonctionne pour moi.
onNavigationItemSelected(navigationView.getMenu().findItem(R.id.nav_profile));
la source
Exemple ( NavigationView.OnNavigationItemSelectedListener ):
Tks
la source
performIdentifierAction
et ce qui se passeonNavigationItemSelected
. Pour vous, cela peut sembler simple, mais un nouveau développeur peut avoir du mal à comprendre votre code.Il y a toujours des problèmes avec les bibliothèques de support "oh so great" de Google. Si vous souhaitez vérifier un élément sans rétrograder la version de vos bibliothèques de support, définissez simplement checkable avant de définir l'état vérifié.
Cela peut également fonctionner si vous définissez checkable dans les fichiers xml du menu
la source
Vous pouvez à la fois mettre en surbrillance et sélectionner l'élément avec la doublure suivante:
Source: https://stackoverflow.com/a/31044917/383761
la source
L'API 23 fournit la méthode suivante:
Cependant, pour une raison quelconque, cette fonction n'a pas provoqué l'exécution du code derrière l'élément de navigation. La méthode met certainement en évidence l'élément dans le tiroir de navigation, ou le `` vérifie '', mais il ne semble pas appeler le
OnNavigationItemSelectedListener
résultat dans un écran vide au démarrage si votre écran de démarrage dépend des sélections du tiroir de navigation. Il est possible d'appeler manuellement l'auditeur, mais cela semble hacky:Le code ci-dessus suppose:
NavigationView.OnNavigationItemSelectedListener
dans votre activiténavigationView.setNavigationItemSelectedListener(this);
la source
Pour cela, vous devez appeler 2 fonctions:
Premièrement: pour échanger les commandes que vous avez implémentées dans l'
onNavigationItemSelected
écouteur:Deuxièmement: pour changer l'état de l'élément de menu du tiroir de navigation sur sélectionné (ou coché):
J'ai appelé les deux fonctions et cela a fonctionné pour moi.
la source
Le code suivant ne fera que sélectionner l'élément de menu:
navigationView.setCheckedItem(id);
Pour sélectionner et ouvrir l'élément de menu, ajoutez le code suivant après la ligne ci-dessus.
onNavigationItemSelected(navigationView.getMenu().getItem(0));
la source
Ceci est ma solution, très simple.
Voici mon fichier menu.xml:
Le menu ci-dessus mettra en surbrillance le premier élément du menu. La ligne ci-dessous fera quelque chose (par exemple: afficher le premier fragment, etc.). REMARQUE: écrivez après «configurer votre code de tiroir»
la source
Le moyen le plus simple est de le sélectionner dans xml comme suit,
Notez la ligne
android:checked="true"
la source
Créez d'abord des couleurs pour l'élément sélectionné. Voici https://stackoverflow.com/a/30594875/1462969 bon exemple. Il vous aide à changer la couleur de l'icône. Pour changer l'arrière-plan de tous les éléments sélectionnés, ajoutez dans votre fichier values \ style.xml ce
Où selectable_item_background doit être déclaré dans drawable / selectable_item_background.xml
Où la couleur peut être déclarée dans style.xml
Et après ça
Comme vous le voyez, j'ai utilisé ce mainNavigationMenu_.getMenu (). FindItem (itemId) .setChecked (true); pour définir l'élément sélectionné. Navigation ici
la source
@color/state_list
code dans votre réponse. Par curiosité, où avez-vous obtenu la convention de dénomination pour mettre un trait de soulignement à la fin du nom de la variable? Je n'ai jamais vu cette approche.menuItem.getItemId()
au lieu deitemId
Lorsque vous utilisez
BottomNavigationView
les autres réponses telles quenavigationView.getMenu().getItem(0).setChecked(true);
etnavigationView.setCheckedItem(id);
ne fonctionnera pas, appelersetSelectedItemId
fonctionne:la source
Faire un sélecteur pour un article individuel du tiroir de navigation
Apportez quelques modifications à votre NavigationView
la source
sur votre activité (derrière le tiroir):
et
et dans votre menu:
donc le premier menu est mis en surbrillance et affiché comme menu par défaut.
la source
Le code ci-dessous est utilisé pour sélectionner le premier élément et mettre en surbrillance le premier élément sélectionné dans le menu.
la source
tu peux le faire,
nav_view.getMenu().findItem(R.id.menutem).setChecked(true)
la source
Pour une raison quelconque, il est préférable de trouver le MenuItem en utilisant les ID.
la source