J'essaie de changer le titre d'un élément de menu de l'extérieur de la onOptionsItemSelected(MenuItem item)
méthode.
Je fais déjà ce qui suit;
public boolean onOptionsItemSelected(MenuItem item) {
try {
switch(item.getItemId()) {
case R.id.bedSwitch:
if(item.getTitle().equals("Set to 'In bed'")) {
item.setTitle("Set to 'Out of bed'");
inBed = false;
} else {
item.setTitle("Set to 'In bed'");
inBed = true;
}
break;
}
} catch(Exception e) {
Log.i("Sleep Recorder", e.toString());
}
return true;
}
cependant, j'aimerais pouvoir modifier le titre d'un élément de menu particulier en dehors de cette méthode.
Réponses:
Comme l'a suggéré JxDarkAngel, en l'appelant de n'importe où dans votre activité ,
puis en remplaçant:
est un bien meilleur choix. J'ai utilisé la réponse de https://stackoverflow.com/a/17496503/568197
la source
onPrepareOptionsMenu()
le framework Android l'appelle assez souvent, par exemple lors de l'affichage d'une activité et à chaque fois que le menu est affiché. Cela peut donc ne pas être très efficace si votre menu ne change pas très souvent.invalidateOptionsMenu()
appellera égalementonCreateOptionsMenu()
, afin que vous puissiez mettre la logique de mise à jour dedansonCreateOptionsMenu()
.Je suggère de conserver une référence dans l'activité à l'objet Menu que vous recevez dans onCreateOptionsMenu , puis de l'utiliser pour récupérer le MenuItem qui nécessite la modification au fur et à mesure que vous en avez besoin. Par exemple, vous pouvez faire quelque chose comme suit:
Alternativement, vous pouvez remplacer onPrepareOptionsMenu pour mettre à jour les éléments de menu chaque fois que le menu est affiché.
la source
vous pouvez le faire créer un objet "Menu" global puis l'affecter dans onCreateOptionMenu
puis attribuez ici
Ensuite, utilisez plus tard l'objet Menu attribué pour obtenir les éléments requis
la source
Créez une méthode setOptionsTitle () et définissez un champ dans votre classe. Tel que:
...
Maintenant, lorsque le menu est rempli, changez le titre en quel que soit votre statut:
la source
Vous feriez mieux d'utiliser le remplacement dePrepareOptionsMenu
Voici un exemple
la source
J'utilise ce code pour costumer mon élément de navigation inférieur
la source
Déclarez votre champ de menu.
Voici la méthode onCreateOptionsMenu ()
Voici votre activité de définition de nom. Soit par un clic sur le bouton, soit par un code conditionnel
Cela a fonctionné pour moi.
la source
Il me semble que vous souhaitez modifier le contenu du menu dans une méthode locale, et cette méthode est appelée à tout moment, chaque fois qu'un événement se produit, ou dans le thread d'interface utilisateur d'activité.
Pourquoi ne prenez-vous pas l'instance de Menu dans la variable globale dans onPrepareOptionsMenu lorsque celle-ci est remplacée et utilisez-la dans cette méthode. Assurez-vous que cette méthode est appelée chaque fois qu'un événement se produit (comme un clic sur un bouton), ou dans le thread d'interface utilisateur d'activité, le gestionnaire ou la tâche asynchrone après exécution.
Vous devez connaître à l'avance l'index de cet élément de menu que vous souhaitez modifier. Après avoir effacé le menu, vous devez gonfler le menu XML et mettre à jour le nom ou l'icône de votre élément.
la source
Pour les personnes qui ont besoin que le titre soit défini statiquement. Cela peut être fait dans le AndroidManifest.xml
la source
J'ai dû changer l'icône de menu pour le fragment. J'ai modifié un peu la réponse de Charles à cette question pour le fragment:
la source