Come simulare un clic sul pulsante usando il codice?


216

Come posso attivare un evento clic sul pulsante usando il codice in Android? Voglio attivare il clic sul pulsante a livello di codice quando si verifica un altro evento.

Stesso problema che sto affrontando

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

Codice pulsante:

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

Ma voglio chiamare quella funzione OnLoadLayout senza OnClickEvent


puoi per favore specificare il problema? perché lo vuoi? Vuoi attivare il codice da eseguire?
Vladimir Ivanov,

si, voglio innescare il codice da eseguire per il clic sul pulsante.
sam,

Risposte:


445

c'è un modo migliore.

View.performClick();

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

questo dovrebbe rispondere a tutti i tuoi problemi. ogni vista eredita questa funzione, inclusi Button, Spinner, ecc.

Giusto per chiarire, View non ha un metodo performClick () statico. È necessario chiamare performClick () su un'istanza di View. Ad esempio, non puoi semplicemente chiamare

View.performClick();

Invece, fai qualcosa del tipo:

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

2
Ma qual è il pulsante Indietro di View for Android?
Peter Ajtai,

4
non è presente "Visualizza" per il pulsante Indietro sul telefono. è necessario utilizzare i listener chiave per ottenere la pressione di tali pulsanti. è un problema completamente diverso.
moonlightcheese

3
@moon - Se vuoi che le persone ricevano una notifica dei tuoi commenti, inizia con "@" e le prime lettere dell'utente che desideri vengano notificate .... (gli autori del post commentato vengono automaticamente avvisati, ma i commentatori lo fanno non)
Peter Ajtai il

14
Il codice mostrato in questa risposta è un po 'confuso. Giusto per chiarire, View non ha un metodo performClick () statico. È necessario chiamare performClick () su un'istanza di View.
Łukasz Wiklendt,

3
è confuso solo se non sai cosa stai facendo.
moonlightcheese,

52

Giusto per chiarire cosa ha dichiarato Moonlightcheese: Per attivare un evento di clic sui pulsanti tramite il codice in Android, fornire quanto segue:

buttonName.performClick();

12

puoi farlo in questo modo

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

7

Android callOnClick()( aggiunto in API 15 ) a volte può essere una scelta migliore nella mia esperienza di performClick(). Se un utente ha i suoni di selezione abilitati, allora performClick()potrebbe far sì che l'utente ascolti due suoni di selezione continua che sono in qualche modo sovrapposti l'uno sull'altro e che possono essere stridenti. (Un suono di selezione per il primo clic del pulsante dell'utente, quindi un altro per l'altro pulsante OnClickListenerche stai chiamando tramite codice.)


7

Basta scrivere questa semplice riga di codice: -

button.performClick();

dove button è la variabile di riferimento della classe Button e definita come segue: -

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

Questo è tutto.


6

A partire da API15, puoi utilizzare anche callOnClick()quella chiamata diretta OnClickListener vista allegata. A differenza di performClick (), questo chiama solo il listener e non esegue alcuna azione di clic associata come la segnalazione di un evento di accessibilità.


4

Se non si utilizza l' senderargomento, perché non riformattare l'implementazione del gestore pulsanti per separare la funzione e chiamarla da dove si desidera (dal gestore pulsanti e dall'altra posizione).

Ad ogni modo, è un design migliore e più pulito - un codice che deve essere chiamato sul gestore dei pulsanti E da alcuni altri punti merita di essere refactored alla propria funzione. Inoltre ti aiuterà a separare la gestione dell'interfaccia utente dal codice logico dell'applicazione. Avrai anche un bel nome per la funzione, non solo onDateSelectedButtonClick ().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.