Як імітувати натискання кнопки за допомогою коду?


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 немає статичного методу performClick (). Ви повинні зателефонувати performClick () для екземпляра View. Наприклад, ви не можете просто зателефонувати

View.performClick();

Натомість зробіть щось на кшталт:

View myView = findViewById(R.id.myview);
myView.performClick();

2
Але що таке кнопка "назад для Android"?
Peter Ajtai

4
немає кнопки "Перегляд" для кнопки "Назад" на вашому телефоні. вам потрібно скористатися ключовими слухачами, щоб отримати ці натискання кнопок. це зовсім інше питання.
місячний

3
@moon - Якщо ви хочете, щоб люди отримували сповіщення про ваші коментарі, почніть їх з "@" та перших кількох листів користувача, якого ви хочете повідомити .... (автори коментованих публікацій автоматично отримують повідомлення, але коментатори ні)
Пітер Айтай

14
Код, показаний у цій відповіді, трохи заплутаний. Просто для уточнення, у View немає статичного методу performClick (). Ви повинні зателефонувати performClick () для екземпляра View.
Łukasz Wiklendt

3
це заплутано лише тоді, коли ти не знаєш, що робиш.
місячний

52

Для того, щоб уточнити, що вказано місячним сиром: Щоб запустити кнопку натискання кнопки через код в Android, надайте наступне:

buttonName.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. На відміну від performClick (), він викликає лише слухача, і не робить жодних пов'язаних дій натискання, таких як повідомлення про подію доступності.


4

Якщо ви не використовуєте senderаргумент, чому б не перефактувати реалізацію обробника кнопок на окрему функцію, а зателефонувати їй куди завгодно (від обробника кнопок і з іншого місця).

У будь-якому разі, це кращий і більш чистий дизайн - код, який потрібно викликати в обробці кнопок AND з деяких інших місць, заслуговує на те, щоб його відновити до власних функцій. Плюс це допоможе вам відокремити обробку інтерфейсу користувача від логічного коду програми. Ви також будете мати гарне ім’я функції, а не лише onDateSelectedButtonClick ().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.