могу ли я запустить метод в событии кнопки click в студии android [duplicate]

12
задан omerowitz 2 May 2015 в 12:45
поделиться

8 ответов

Насколько я знаю, в SDK нет механизма, который позволит вам это сделать. Это, конечно, не стандартная практика, чтобы делать такие вещи.

Я рекомендую максимально развязать вашу логику от фактического интерфейса, поэтому вам не нужно , требуя для имитации щелчка для запуска действия. Поскольку вы являетесь веб-разработчиком, это должно быть довольно легко для вас.

В этом случае вы хотите реорганизовать тосты в отдельный метод (или несколько методов), а затем называть это как когда элемент меню щелкнут и когда вы хотите запустить его вручную.

В качестве альтернативы вы можете попробовать взять MenuItem, возвращенный findViewById (), и передать его этому обработчику. Но я не знаю, будет ли это работать.

7
ответ дан Veselin Romić 5 September 2018 в 10:33
поделиться

Хотя это не лучший способ сделать,

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);
3
ответ дан Ajay Shrestha 5 September 2018 в 10:33
поделиться
  1. Сделать глобальное меню общедоступным Меню mMenu;
  2. Назначить mMenu в меню при переопределении onCreateOptionMenu @Override public boolean onCreateOptionsMenu (меню меню) {this.mMenu = menu; return super.onCreateOptionsMenu (меню); } Вызвать событие следующим образом: if (mMenu! = Null) {MenuItem action = mMenu.findItem (R.id.action_restart); if (action! = null) onOptionsItemSelected (действие); }
0
ответ дан DenVik 5 September 2018 в 10:33
поделиться

В соответствии с вашим примером для пункта меню выше:

<item android:id="@+id/action_restart" android:title="Restart"
        android:orderInCategory="1" />

использовать метод callOnClick():

((ActionMenuItemView)findViewById(R.id.action_restart)).callOnClick();
0
ответ дан Matt 5 September 2018 в 10:33
поделиться

Для этого существует стандартный метод. Создайте новый экземпляр класса MenuItem и измените переопределенный метод getItemId(), чтобы вернуть идентификатор нужного пункта меню и оставить остальным без изменений.

MenuItem actionRestart = new MenuItem() {
                                             @Override
                                             public int getItemId() {
                                               return R.id.action_restart;
                                             }

                                             ...

                                           };
onOptionsItemSelected(actionRestart);
-2
ответ дан Shivendra Singh Vishen 5 September 2018 в 10:33
поделиться

Используйте метод performIdentifierAction, например:

menu.performIdentifierAction(R.id.action_restart, 0);
2
ответ дан Simon 5 September 2018 в 10:33
поделиться

Я также хотел бы поделиться своим решением. Вместо того, чтобы пытаться щелкнуть программным образом элемент меню, я создал отдельный метод для щелчка элемента меню и назову его в любом месте, где мне нужно щелкнуть пункт меню. Метод OnOptionsItemSelected выглядит следующим образом. Как вы можете видеть, я переместил логику щелчка на отдельный метод.

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

Теперь вы можете вызвать homeClicked в любое время, когда вам нужно щелкнуть пункт меню программно.

4
ответ дан Turdaliev Nursultan 5 September 2018 в 10:33
поделиться

Вы должны вручную вызвать своего слушателя с обязательным параметром в качестве параметра.

MenuItem actionRestart = (MenuItem) findViewById(R.id.action_restart);
onOptionsItemSelected(actionRestart);
11
ответ дан VadymVL 5 September 2018 в 10:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: