Comment déclencher par programme / cliquer sur un MenuItem dans Android?
J'ai ces éléments de menu dans mon 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 mon onOptionsItemSelected
méthode:
@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 actionRestart
de référence n'offre pas quelque chose comme click
trigger
etc.
Je tiens également à noter que je suis nouveau sur Android, le développement et la je viens de PHP/JavaScript arrière-plan, de sorte que ce niveau de Java POO est tout nouveau pour moi.
source d'informationauteur omerowitz
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, il n'existe pas de mécanisme dans le kit de développement logiciel qui vous permet de le faire. Ce n'est certainement pas l'habitude de faire ce genre de chose.
Je recommande découplage votre logique de l'INTERFACE utilisateur autant que possible, de sorte que vous ne besoin pour simuler un clic pour déclencher l'action. Puisque vous êtes un développeur Web, cela devrait venir assez facilement à vous.
Dans ce cas, vous souhaitez refactoriser les toasts dans une méthode distincte (ou de plusieurs méthodes), et ensuite appeler que les deux lorsque l'élément de menu est cliqué et quand vous voulez déclencher manuellement.
Sinonvous pourriez essayer de prendre l'MenuItem retourné par findViewById() et de le transmettre à votre gestionnaire. Mais je n'ai aucune idée de si ça va fonctionner.
Vous devez manuellement appel à votre écoute, avec élément en paramètre.
Même si c'est pas la meilleure façon de le faire,
Je voudrais partager ma solution ici. Au lieu d'essayer de cliquer sur par programme un élément de menu, j'ai créé une méthode distincte pour l'élément de menu cliquez sur, et de l'appeler de n'importe où où je dois cliquer sur l'élément de menu.
OnOptionsItemSelected
méthode se présente comme suit. Comme vous pouvez le voir, j'ai déménagé sur la logique d'une méthode distincte.Maintenant, vous pouvez appeler
homeClicked
à tout moment, vous devez cliquer sur l'élément de menu par programmation.Utiliser la méthode performIdentifierAction
comme ceci:
Que par votre exemple pour l'élément de menu ci-dessus :
utilisation
callOnClick()
méthode :Mondiale Menu
publique Menu mMenu;
Attribuer mMenu de menu pendant la remplacer onCreateOptionMenu
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
c'.mMenu = menu;
retour super.onCreateOptionsMenu(menu);
}
Événement d'appel comme ceci:
si(mMenu!=null)
{
MenuItem action = mMenu.findItem(R. id.action_restart);
si(l'action!=null)
onOptionsItemSelected(action);
}
Il y a une méthode standard pour ce faire -
Créer une nouvelle instance de
MenuItem
de classe et changement de la méthode de remplacementgetItemId()
pour retourner l'id de menu souhaité et laisser le reste inchangé.