Насколько я знаю, в SDK нет механизма, который позволит вам это сделать. Это, конечно, не стандартная практика, чтобы делать такие вещи.
Я рекомендую максимально развязать вашу логику от фактического интерфейса, поэтому вам не нужно , требуя для имитации щелчка для запуска действия. Поскольку вы являетесь веб-разработчиком, это должно быть довольно легко для вас.
В этом случае вы хотите реорганизовать тосты в отдельный метод (или несколько методов), а затем называть это как когда элемент меню щелкнут и когда вы хотите запустить его вручную.
В качестве альтернативы вы можете попробовать взять MenuItem, возвращенный findViewById (), и передать его этому обработчику. Но я не знаю, будет ли это работать.
Хотя это не лучший способ сделать,
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);
В соответствии с вашим примером для пункта меню выше:
<item android:id="@+id/action_restart" android:title="Restart"
android:orderInCategory="1" />
использовать метод callOnClick()
:
((ActionMenuItemView)findViewById(R.id.action_restart)).callOnClick();
Для этого существует стандартный метод. Создайте новый экземпляр класса MenuItem
и измените переопределенный метод getItemId()
, чтобы вернуть идентификатор нужного пункта меню и оставить остальным без изменений.
MenuItem actionRestart = new MenuItem() {
@Override
public int getItemId() {
return R.id.action_restart;
}
...
};
onOptionsItemSelected(actionRestart);
Используйте метод performIdentifierAction, например:
menu.performIdentifierAction(R.id.action_restart, 0);
Я также хотел бы поделиться своим решением. Вместо того, чтобы пытаться щелкнуть программным образом элемент меню, я создал отдельный метод для щелчка элемента меню и назову его в любом месте, где мне нужно щелкнуть пункт меню. Метод OnOptionsItemSelected
выглядит следующим образом. Как вы можете видеть, я переместил логику щелчка на отдельный метод.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
homeClicked();
}
return super.onOptionsItemSelected(item);
}
private void homeClicked(){
...
}
Теперь вы можете вызвать homeClicked
в любое время, когда вам нужно щелкнуть пункт меню программно.
Вы должны вручную вызвать своего слушателя с обязательным параметром в качестве параметра.
MenuItem actionRestart = (MenuItem) findViewById(R.id.action_restart);
onOptionsItemSelected(actionRestart);