Comment ajouter un élément à un groupe de menu dans la fenêtre des éléments
En un mot le jeu pour Android j'ai actuellement un menu codé en dur gonflé de left_drawer_menu.xml
et composé de 3 groupes (à mon tour, opposant son tour et enfin d'autres trucs):
mLeftDrawer = (NavigationView) findViewById(R.id.left_drawer);
mLeftDrawer.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(final MenuItem menuItem) {
Menu menu = mLeftDrawer.getMenu();
if (menuItem.getGroupId() == R.id.my_move) {
menu.setGroupCheckable(R.id.my_move, true, true);
menu.setGroupCheckable(R.id.his_move, false, false);
menu.setGroupCheckable(R.id.extras, false, false);
} else if (menuItem.getGroupId() == R.id.his_move) {
menu.setGroupCheckable(R.id.my_move, false, false);
menu.setGroupCheckable(R.id.his_move, true, true);
menu.setGroupCheckable(R.id.extras, false, false);
} else if (menuItem.getGroupId() == R.id.extras) {
menu.setGroupCheckable(R.id.my_move, false, false);
menu.setGroupCheckable(R.id.his_move, false, false);
menu.setGroupCheckable(R.id.extras, true, true);
}
menuItem.setChecked(true);
mLeftItem = menuItem.getItemId();
mDrawerLayout.closeDrawer(mLeftDrawer);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (mLeftItem == R.id.start) {
startNewGame();
}
}
},DRAWER_CLOSE_DELAY);
return true;
}
});
Maintenant, je suis en train de changer le menu dynamiquement.
J'ai SQLite instance contenant toutes les données de jeu et l'utilisation IntentService
de lecture/écriture de la base de données cette partie fonctionne très bien.
Ma difficulté actuelle est: avec le code suivant, les nouveaux éléments sont ajoutés à l'extérieur la R.id.my_move
groupe:
if (mLeftItem == R.id.start) {
startNewGame();
Random r = new Random();
int i = r.nextInt(100);
menu.add(R.id.my_move, i, i, "Item " + i); //why is my_move ignored?
}
Mise à JOUR:
Comme un autre test, j'ai essayé affectation de même et de ne pas même des articles à 2 groupes distincts avec ce code:
Random r = new Random();
int i = r.nextInt(100);
int group = 1 + (i % 2); //can be 1 or 2
menu.add(group, i, i, "Item " + i);
Cependant, le résultat semble chaotique:
Aussi j'ai découvert l' (probablement déjà fixé?) Question 176300 et je me demande si peut-être les sous-menus devraient être mieux utilisé à la place de groupes de menus?
- Vous pouvez poster votre xml lorsque vous avez défini vos groupes?
- Merci, c'est ici: gist.github.com/afarber/03408cf4d1e3f267589f
- voir this peut vous aide
Vous devez vous connecter pour publier un commentaire.
Sur la vérification de MenuItemImpl code source
Donc, vous devez définir la commande dans votre xml (donner le même ordre des éléments dans un groupe et d'un incrément dans chaque groupe suivant)
et donner une valeur de l'ordre lors de l'ajout de l'élément dans votre code. Donc, si vous voulez ajouter un élément à la fin du premier groupe, l'ajouter en tant que:
et si vous voulez ajouter au deuxième groupe, l'ajouter en tant que:
Le problème avec votre code pourrait être que tous les éléments du xml par défaut orderInCategory 0 et donc le nouvel élément est ajouté après
tous ces éléments.
Mise à JOUR
Pour ajouter l'icône de l'utilisation
setIcon
méthode pourMenuItem
setIcon
méthode pour définir une icône, une réponse de mise à jour.Je l'ai résolu de cette façon:
Configurer le menu:
Dans
onNavigationItemSelected()
, obtenirMenuItem
vous souhaitez développer par l'id de la commande (ou viafindItem()
), puis obtenirSubMenu
et ajouter un nouvel élément dans ce:Je l'espère, il aide
Vous êtes également l'attribution de la commande (3e param) comme
i
. Je suppose que c'est remplacer l'id de groupe. Essayez de le définir commeNONE
comme mentionné iciEdit:
Peut-être quelque chose comme ceci
Order
est une combinaison de la catégorie et de l'ordre, de sorte qu'il pourrait ne pas être aussi simple que cela.Menu.NONE
ne permet pas de résoudre le problème et les éléments de menu sont toujours ajoutés au bas de laNavigationView
menu - et pas dans le plus grand groupe.