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.