Jak symulować kliknięcie przycisku za pomocą kodu?


216

Jak mogę wywołać zdarzenie kliknięcia przycisku przy użyciu kodu w systemie Android? Chcę uruchomić programowo kliknięcie przycisku, gdy wystąpi inne zdarzenie.

Ten sam problem, przed którym stoję

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

Kod przycisku:

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

Ale chcę wywołać tę funkcję OnLoadLayout bez OnClickEvent


czy możesz podać problem? dlaczego tego chcesz? Czy chcesz uruchomić jakiś kod do wykonania?
Vladimir Ivanov

tak, chcę uruchomić kod, który zostanie wykonany dla kliknięcia przycisku.
Sam

Odpowiedzi:


445

jest lepszy sposób.

View.performClick();

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

to powinno odpowiedzieć na wszystkie twoje problemy. każdy widok dziedziczy tę funkcję, w tym przycisk, pokrętło itp.

Dla wyjaśnienia, View nie ma statycznej metody performClick (). Musisz wywołać performClick () w instancji View. Na przykład nie możesz po prostu zadzwonić

View.performClick();

Zamiast tego zrób coś takiego:

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

2
Ale czym jest przycisk Wstecz dla Androida?
Peter Ajtai

4
w telefonie nie ma przycisku „Widok”. musisz użyć kluczowych słuchaczy, aby uzyskać te naciśnięcia przycisków. to zupełnie inna kwestia.
moonlightcheese

3
@moon - Jeśli chcesz, aby ludzie byli powiadamiani o twoich komentarzach, zacznij od "@" i pierwszych kilku liter użytkownika, którego chcesz powiadomić .... (autorzy komentowanego postu automatycznie otrzymują powiadomienie, ale komentatorzy robią to nie)
Peter Ajtai

14
Kod pokazany w tej odpowiedzi jest trochę mylący. Dla wyjaśnienia, View nie ma statycznej metody performClick (). Musisz wywołać performClick () w instancji View.
Łukasz Wiklendt,

3
jest to mylące tylko wtedy, gdy nie wiesz, co robisz.
moonlightcheese

52

Aby wyjaśnić, co powiedział moonlightcheese: Aby wywołać zdarzenie kliknięcia przycisku za pomocą kodu w Androidzie, wykonaj następujące czynności:

buttonName.performClick();

12

możesz to zrobić w ten sposób

private Button btn;
btn = (Button)findViewById(R.id.button2);
btn.performClick();

7

Android callOnClick()( dodany w API 15 ) może czasem być lepszym wyborem z mojego doświadczenia niż performClick(). Jeśli użytkownik ma włączone dźwięki selekcji, performClick()może usłyszeć dwa ciągłe dźwięki selekcji, które są nieco ułożone warstwami jeden na drugim, co może powodować zgrzyt. (Jeden dźwięk wyboru dla pierwszego kliknięcia przycisku użytkownika, a następnie inny dla przycisku OnClickListener, do którego dzwonisz za pomocą kodu).


7

Po prostu napisz ten prosty wiersz kodu: -

button.performClick();

gdzie button jest zmienną referencyjną klasy Button i jest zdefiniowany w następujący sposób:

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

Otóż ​​to.


6

Począwszy od API15, można również użyć callOnClick()tego bezpośredniego wywołania dołączonego widoku OnClickListener. W przeciwieństwie do performClick (), wywołuje to tylko detektor i nie wykonuje żadnych powiązanych działań kliknięcia, takich jak zgłaszanie zdarzenia dostępności.


4

Jeśli nie użyjesz senderargumentu, dlaczego nie przefakturuj implementacji modułu obsługi przycisków do oddzielenia funkcji i wywołaj ją z dowolnego miejsca (z modułu obsługi przycisków i z innego miejsca).

W każdym razie jest to lepszy i czystszy projekt - kod, który należy wywołać w module obsługi przycisków ORAZ z innych miejsc, zasługuje na refaktoryzację do własnej funkcji. Ponadto pomoże ci oddzielić obsługę interfejsu użytkownika od kodu logicznego aplikacji. Będziesz także mieć przyjemną nazwę dla funkcji, nie tylko onDateSelectedButtonClick ().

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.