Как смоделировать нажатие кнопки с помощью кода? - PullRequest
201 голосов
/ 29 декабря 2010

Как я могу вызвать событие нажатия кнопки, используя код в Android? Я хочу программно вызвать нажатие кнопки, когда происходит какое-то другое событие.

Та же проблема, с которой я сталкиваюсь

public void onDateSelectedButtonClick(View v){
    /*Something  Alarm Management 
    http://www.java2s.com/Code/Android/Core-Class/Alarmdemo.htm
    copied code from this site*/
}

Код кнопки:

<Button
    android:onClick="onDateSelectedButtonClick"
    android:text="Set notification for this date" />

Но я хочу вызвать эту функцию OnLoadLayout без OnClickEvent

Ответы [ 7 ]

425 голосов
/ 02 февраля 2011

есть лучший способ.

View.performClick();

http://developer.android.com/reference/android/view/View.html#performClick()

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

49 голосов
/ 28 марта 2012

Просто чтобы уточнить, что сказал Moonlightcheese: чтобы вызвать событие нажатия кнопки через код в Android, укажите следующее:

buttonName.performClick();
11 голосов
/ 24 сентября 2015

вы можете сделать это так

private Button btn;
btn = (Button)findViewById(R.id.button2);
btn.performClick();
7 голосов
/ 16 июля 2015

Просто напишите эту простую строку кода: -

button.performClick();

где кнопка является ссылочной переменной класса Button и определяется следующим образом: -

private Button buttonToday ;
buttonToday = (Button) findViewById(R.id.buttonToday);

Вот и все.

7 голосов
/ 12 ноября 2013

Android callOnClick() ( добавлено в API 15 ) иногда может быть лучшим выбором, чем performClick(). Если у пользователя включены звуки выбора, то performClick() может привести к тому, что пользователь услышит два непрерывных звука выбора, которые несколько наслоены друг на друга, что может вызывать дрожание. (Один звук выбора для первого нажатия кнопки пользователем, а затем другой для OnClickListener другой кнопки, которую вы вызываете с помощью кода.)

4 голосов
/ 20 июля 2016

Начиная с API15, вы также можете использовать callOnClick(), который напрямую вызывает вложенное представление OnClickListener. В отличие от executeClick (), он вызывает только прослушиватель и не выполняет никаких связанных действий щелчка, таких как сообщение о событии доступности

3 голосов
/ 09 июля 2015

Если вы не используете аргумент sender, почему бы не рефакторировать реализацию обработчика кнопки, чтобы отделить функцию, и вызывать ее откуда угодно (из обработчика кнопки и из другого места).

В любом случае, это лучший и более чистый дизайн - код, который необходимо вызывать в обработчике кнопок И из некоторых других мест, заслуживает рефакторинга для собственной функции. Кроме того, это поможет вам отделить обработку пользовательского интерфейса от логического кода приложения. У вас также будет красивое имя функции, а не только onDateSelectedButtonClick ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...