Wie simuliere ich einen Schaltflächenklick mit Code?

216

Wie kann ich ein Button-Click-Ereignis mithilfe von Code in Android auslösen? Ich möchte den Klick auf die Schaltfläche programmgesteuert auslösen, wenn ein anderes Ereignis eintritt.

Gleiches Problem, mit dem ich konfrontiert bin

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

Schaltflächencode:

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

Aber ich möchte diese Funktion OnLoadLayout ohne OnClickEvent aufrufen

Sam
quelle
Können Sie bitte das Problem angeben? Warum willst du das? Möchten Sie einen Code auslösen, der ausgeführt werden soll?
Vladimir Ivanov
Ja, ich möchte den Code auslösen, der für den Klick auf die Schaltfläche ausgeführt werden soll.
Sam

Antworten:

445

Es gibt einen besseren Weg.

View.performClick();

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

Dies sollte alle Ihre Probleme beantworten. Jede Ansicht erbt diese Funktion, einschließlich Button, Spinner usw.

Zur Verdeutlichung verfügt View nicht über eine statische performClick () -Methode. Sie müssen performClick () für eine Instanz von View aufrufen. Zum Beispiel können Sie nicht einfach anrufen

View.performClick();

Tun Sie stattdessen etwas wie:

View myView = findViewById(R.id.myview);
myView.performClick();
Mondscheinkäse
quelle
2
Aber wie lautet die Schaltfläche "Zurück anzeigen" für Android?
Peter Ajtai
4
Es gibt keine "Ansicht" für die Zurück-Taste auf Ihrem Telefon. Sie müssen Key Listener verwenden, um diese Tastendrücke zu erhalten. Das ist ein ganz anderes Thema.
Moonlightcheese
3
@moon - Wenn Sie möchten, dass Personen über Ihre Kommentare benachrichtigt werden, beginnen Sie sie mit "@" und den ersten Buchstaben des Benutzers, den Sie benachrichtigen möchten .... (Autoren des kommentierten Beitrags werden automatisch benachrichtigt, Kommentatoren jedoch nicht)
Peter Ajtai
14
Der in dieser Antwort gezeigte Code ist etwas verwirrend. Zur Verdeutlichung verfügt View nicht über eine statische performClick () -Methode. Sie müssen performClick () für eine Instanz von View aufrufen.
Łukasz Wiklendt
3
Es ist nur verwirrend, wenn Sie nicht wissen, was Sie tun.
Moonlightcheese
52

Nur um zu verdeutlichen, was Moonlightcheese gesagt hat: Um ein Schaltflächenklickereignis durch Code in Android auszulösen, gehen Sie wie folgt vor:

buttonName.performClick();
Scott Tovey
quelle
12

Sie können es auf diese Weise tun

private Button btn;
btn = (Button)findViewById(R.id.button2);
btn.performClick();
Tushar Saha
quelle
7

Android callOnClick()( hinzugefügt in API 15 ) kann meiner Erfahrung nach manchmal die bessere Wahl sein als performClick(). Wenn für einen Benutzer Auswahlgeräusche aktiviert sind, kann performClick()dies dazu führen, dass der Benutzer zwei fortlaufende Auswahlgeräusche hört, die etwas übereinander liegen und störend wirken können. (Ein Auswahlton für den ersten Tastenklick des Benutzers und ein anderer für die anderen Tasten, OnClickListenerdie Sie per Code aufrufen.)

Charles Madere
quelle
7

Schreiben Sie einfach diese einfache Codezeile: -

button.performClick();

Dabei ist button die Referenzvariable der Button-Klasse und wie folgt definiert: -

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

Das ist es.

Deepak Sharma
quelle
6

Ab API15 können Sie auch callOnClick()die direkt angehängte Ansicht OnClickListener aufrufen. Im Gegensatz zu performClick () ruft dies nur den Listener auf und führt keine zugehörigen Klickaktionen wie das Melden eines Eingabehilfenereignisses aus.

Colateral
quelle
4

Wenn Sie das senderArgument nicht verwenden, können Sie die Implementierung des Schaltflächenhandlers umgestalten, um die Funktion zu trennen, und sie von jedem beliebigen Ort aus aufrufen (vom Schaltflächenhandler und von der anderen Stelle).

Auf jeden Fall ist es ein besseres und saubereres Design - ein Code, der auf dem Button-Handler aufgerufen werden muss UND von einigen anderen Stellen aus verdient, in eine eigene Funktion umgestaltet zu werden. Außerdem können Sie damit die Benutzeroberfläche besser vom Anwendungslogikcode trennen. Sie haben auch einen schönen Namen für die Funktion, nicht nur onDateSelectedButtonClick ().

d.popov
quelle