Android - Comment modifier dynamiquement l'option de menu à l'extérieur de onOptionsItemsSelected ou onCreateOptionsMenu
Je suis en train de changer le titre d'un élément de menu à partir de l'extérieur de la onOptionsItemSelected(MenuItem item)
méthode.
Je fais déjà de la suivante;
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, je voudrais être en mesure de modifier le titre d'un élément de menu particulier à l'extérieur de cette méthode.
- stackoverflow.com/a/32072318/1651286 devrait être la accepté de répondre à
InformationsquelleAutor Garbit | 2011-08-15
Vous devez vous connecter pour publier un commentaire.
Je suggère de garder une référence au sein de l'activité de l'objet Menu vous recevoir dans onCreateOptionsMenu puis à l'aide pour récupérer le MenuItem qui nécessite le changement comme et quand vous en avez besoin. Par exemple, vous pouvez faire quelque chose le long des lignes suivantes:
Alternativement, vous pouvez remplacer onPrepareOptionsMenu de mettre à jour les éléments de menu à chaque fois que le menu est affiché.
Comme JxDarkAngel suggéré, l'appeler à partir de n'importe où dans votre Activité,
et puis en substituant:
est un bien meilleur choix. J'ai utilisé la réponse de https://stackoverflow.com/a/17496503/568197
onPrepareOptionsMenu()
est appelé assez souvent par l'Androïde cadre, par exemple lors de l'affichage d'une Activité et à chaque fois que le menu est affiché. Si cela peut ne pas être très efficace, si votre menu ne change pas très souvent.invalidateOptionsMenu()
également appelonCreateOptionsMenu()
, de sorte que vous pouvez mettre la logique de mise à jouronCreateOptionsMenu()
.ce faire, vous pouvez créer une "Menu" objet puis l'assigner dans onCreateOptionMenu
ensuite attribuer ici
Ensuite affecté Menu objet pour obtenir des éléments requis
Créer un setOptionsTitle() la méthode et de définir un champ dans votre classe. Tels que:
...
Maintenant, lorsque le menu est renseigné, modifier le titre, quel que soit votre statut est:
Vous feriez mieux d'utiliser le remplacement onPrepareOptionsMenu
Ici un exemple
J'utilise ce code pour costum mon fond d'élément de navigation
Déclarer votre menu de terrain.
Suivant est onCreateOptionsMenu() la méthode
Qui suit sera votre nom setter activité. Soit par un clic sur un bouton ou par le biais de code conditionnel
Cela a fonctionné pour moi.
Il me semble que vous souhaitez modifier le contenu d'un menu à l'intérieur d'un local, et cette méthode est appelée à tout moment, chaque fois qu'un événement est survenu, ou à l'activité dans le thread de l'INTERFACE utilisateur.
Pourquoi ne prenez-vous pas l'exemple de Menu dans la variable globale dans onPrepareOptionsMenu lorsque cela est remplacée et l'utilisation de cette méthode de la vôtre. Assurez-vous que cette méthode est appelée à chaque fois qu'un événement est survenu (comme le bouton de la souris) ou à l'activité dans le thread de l'INTERFACE utilisateur, gestionnaire ou asynchrone-poste de travail-exécution.
Que vous devez savoir à l'avance l'indice de cet élément de menu que vous voulez modifier. Après avoir franchi le menu, vous avez besoin pour gonfler le menu XML et mise à jour de votre nom de l'élément ou de l'icône.
Pour les personnes qui ont besoin de l'ensemble du titre de manière statique.
Cela peut être fait dans le AndroidManifest.xml
J'avais besoin de changer l'icône de menu pour le fragment. J'ai modifié Charles de réponse à cette question un peu pour le fragment: