Comment programmer / activer / cliquer sur un MenuItem dans Android?

J'ai ces éléments de menu dans ma menu_main.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <item android:id="@+id/action_restart" android:title="Restart" android:orderInCategory="1" /> <item android:id="@+id/action_clear" android:title="Clear" android:orderInCategory="2" /> <item android:id="@+id/action_update" android:title="Update" android:orderInCategory="3" /> <item android:id="@+id/action_about" android:title="About" android:orderInCategory="4" /> <item android:id="@+id/action_try_restart" android:title="Try Restart" android:orderInCategory="5" /> </menu> 

Et j'ai ceci dans ma méthode onOptionsItemSelected :

  • Star Button dans Android
  • Eclipse Débogage L'Android ne fonctionne pas
  • Android: Normes pour préfixer des fichiers dans le répertoire RES à part ic_?
  • Connexion à wi-fi à l'aide d'une coque AdB
  • Compatibilité de la version de l'API Android
  • La méthode Draw () de ReplacementSpan n'est pas appelée
  •  @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_restart) { Toast.makeText(MainActivity.this, "Restart...", Toast.LENGTH_LONG).show(); } if (id == R.id.action_clear) { Toast.makeText(MainActivity.this, "Clear...", Toast.LENGTH_LONG).show(); } if (id == R.id.action_update) { Toast.makeText(MainActivity.this, "Update...", Toast.LENGTH_LONG).show(); } if (id == R.id.action_about) { Toast.makeText(MainActivity.this, "About...", Toast.LENGTH_LONG).show(); } if(id == R.id.action_try_restart) { // how to click / trigger the "action_restart" from here? } return super.onOptionsItemSelected(item); } 

    J'ai essayé avec:

     MenuItem actionRestart = (MenuItem) findViewById(R.id.action_restart); actionRestart; // 

    Mais la référence actionRestart n'offre rien comme le click , le trigger , etc.

    Je voudrais également noter que je suis nouveau dans le développement d'Android et que je viens d'un fond d'écran PHP / JavaScript, donc ce niveau de Java OOP est tout nouveau pour moi.

  • Comment trier par ordre alphabétique tout en ignorant les différences entre les cas?
  • Exécution de bytecode Java sur Android - Sun JVM en haut de DalvikVM
  • ConnectedAndroidTest sur plusieurs émulateurs
  • Développer l'élément ListView avec l'animation
  • Déconnexion Signing Config on Gradle Product Flavors
  • Existe-t-il un moyen d'ajouter une icône à une Snackbar?
  • 6 Solutions collect form web for “Comment programmer / activer / cliquer sur un MenuItem dans Android?”

    Pour autant que je sache, il n'y a aucun mécanisme dans le SDK qui vous permet de faire cela. Ce n'est certainement pas une pratique courante de faire ce genre de chose.

    Je recommande de découpler votre logique de l'interface utilisateur réelle autant que possible, de sorte que vous ne devez pas simuler un clic pour déclencher l'action. Comme vous êtes un développeur Web, cela devrait vous arriver assez facilement.

    Dans ce cas, vous souhaitez refactoriser les toasts dans une méthode distincte (ou plusieurs méthodes), puis appeler cela à la fois lorsque l'élément de menu est cliqué et lorsque vous souhaitez le déclencher manuellement.

    Alternativement , vous pouvez essayer de prendre le MenuItem retourné par findViewById () et de le transmettre à votre gestionnaire là-bas. Mais je ne sais pas si cela fonctionnera.

    Vous devez appeler manuellement votre auditeur, avec l'élément requis comme paramètre.

     MenuItem actionRestart = (MenuItem) findViewById(R.id.action_restart); onOptionsItemSelected(actionRestart); 

    Je voudrais également partager ma solution ici. Au lieu d'essayer de cliquer par programme sur un élément de menu, j'ai créé une méthode distincte pour cliquer sur le menu, et l'appeler partout où je dois cliquer sur l'élément de menu. OnOptionsItemSelected méthode OnOptionsItemSelected ressemble comme suit. Comme vous pouvez le voir, j'ai déplacé la logique de clic vers une méthode distincte.

     @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { homeClicked(); } return super.onOptionsItemSelected(item); } private void homeClicked(){ ... } 

    Maintenant, vous pouvez appeler homeClicked chaque fois que vous devez cliquer sur l'élément de menu par programme.

    Même si ce n'est pas la meilleure façon de le faire,

     MenuItem item_your_choice; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.your_menu, menu); item_your_choice = menu.findItem(R.id.item_your_choice); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case item_your_choice: //do whatever you want break; } just Call from any method onOptionsItemSelected(item_you_choice); 

    Utilisez la méthode performIdentifierAction , comme ceci:

     menu.performIdentifierAction(R.id.action_restart, 0); 

    Il existe une méthode standard pour ce faire –
    Créez une nouvelle instance de la classe MenuItem et modifiez la méthode remplacée getItemId() pour renvoyer l'ID de l'élément de menu souhaité et laisser le reste inchangé.

     MenuItem actionRestart = new MenuItem() { @Override public int getItemId() { return R.id.action_restart; } ... }; onOptionsItemSelected(actionRestart); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.