Как смоделировать нажатие кнопки с помощью кода?

216

Как я могу вызвать событие нажатия кнопки, используя код в 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

Сэм
источник
не могли бы вы уточнить проблему? зачем тебе это? Хотите запустить какой-нибудь код для выполнения?
Владимир Иванов
да, я хочу вызвать код, который будет выполнен для нажатия кнопки.
Сэм

Ответы:

445

Существует лучший способ.

View.performClick();

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

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

Для пояснения, у View нет статического метода executeClick (). Вы должны вызвать executeClick () для экземпляра View. Например, вы не можете просто позвонить

View.performClick();

Вместо этого сделайте что-то вроде:

View myView = findViewById(R.id.myview);
myView.performClick();
moonlightcheese
источник
2
Но что такое кнопка «Назад для Android»?
Питер Айтай
4
на вашем телефоне нет кнопки «Вид» для кнопки «Назад». Вы должны использовать ключевые слушатели, чтобы получить те нажатия кнопок. это совсем другая проблема.
Moonlightcheese
3
@moon - если вы хотите, чтобы люди получали уведомления о ваших комментариях, начните их с "@" и первых нескольких писем пользователя, которого вы хотите уведомить .... (авторы поста с комментариями автоматически получают уведомление, но комментаторы делают нет)
Питер Айтай
14
Код, показанный в этом ответе, немного сбивает с толку. Для пояснения, у View нет статического метода executeClick (). Вы должны вызвать executeClick () для экземпляра View.
Лукаш Виклендт
3
это только сбивает с толку, если вы не знаете, что делаете.
Moonlightcheese
52

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

buttonName.performClick();
Скотт Тови
источник
12

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

private Button btn;
btn = (Button)findViewById(R.id.button2);
btn.performClick();
Тушар Саха
источник
7

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

Шарль Мадер
источник
7

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

button.performClick();

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

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

Вот и все.

Дипак Шарма
источник
6

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

Colateral
источник
4

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

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

d.popov
источник