Nel capitolo precedente abbiamo costruito la struttura base dell’applicazione, inserendo una TextView e due bottoni. In questo capitolo assoceremo un oggetto listener ad entrambi i bottoni e cambiaremo il valore all’interno della TextView a seconda che venga cliccato il primo o il secondo bottone.
Come è facile intuire, ci sono vari tipi di listener ed ognuno di essi è delegato a riconoscere e gestire una particolare interazione dell’utente con lo schermo del dispositivo. Nel nostro caso, dato che si vuole gestire l’evento "click sul bottone", useremo un listener di tipo OnClickListener.
La classe OnClickListener, come possiamo vedere sulla documentazione ufficiale di Android (per recuperarla è sufficiente inserire il nome della classe all’interno del campo di ricerca), è una classe astratta e per questo motivo non può essere direttamente istanziata senza prima ridefinirne i metodi. Analizzando ancora la documentazone vediamo che l’unico metodo dichiarato nella classe è il metodo OnClick che dobbiamo ridefine al momento dell’istanziazione del listener. In questo metodo dobbiamo inserire il codice relativo al comportamento voluto quando il listener cattura l’evento a cui è associato.
A questo punto apriamo il file MainActivity.java e, come prima cosa, importiamo il seguente pacchetto:
import android.view.View;
il quale contiene la classe OnClickListener.
Fatto ciò, dopo il codice relativo all’asociazione degli elementi dichiarati nel file activity_main.xml, inseriamo il segente codice:
bottone1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
textView1.setText("E' stato premuto il bottone 1");
}
});
bottone2.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
textView1.setText("E' stato premuto il bottone 2");
}
});
Andiamo adesso ad analizzare il codice sopra presentato. Come prima cosa si associa al bottone1 un OnClickListener utilizzando il metodo setOnClickListener.
Il lettore, prababilmente, si troverà un po’ disorientato leggendo la struttura del codice relativo all’istanziazione dell’ OnClickListener() in quanto non è molto lineare. Il codice però rispecchia quanto detto qualche paragrafo prima riguardo alla necessità di dover ridefinire il metodo onClick. Infatti quando istanziamo l’OnClickListener con il costrutto new andiamo anche a definire il metodo onClick inserendo come comportamento l’aggiornamento del contenuto della TextView.
Anche se la sintassi sopra riportata può risultare ostica al lettore è opportuno che quest’ultimo ne prenda familiarità in quanto questo è l’unico modo in cui istanziare, in maniera corretta, un listener. Infatti se avessimo tentato di istanziare l’OnClickListener e, dopo il metodo onCreate, di definire il metodo OnClick avremmo ottenuto solamente un messaggio di errore da parte del compilatore il quale ci indica che non è possibile istanziare direttamente la classe OnClickListener in quanto astratta.
Il codice relativo al bottone2 è il medesimo e volutamente ne viene omessa la spiegazione.
Il metodo sopra riportato, anche se perfettamente funzionante e logicamente corretto, non è la soluzione più corretta da adottare in quanto richiede la scrittura di parecchio codice. Quest’ultimo risulta anche di difficile manutenzione se si ha a che fare con tanti elementi a cui è associato un OnClickListener. Nel prossimo capitolo presenteremo, pertanto, un’implementazione più efficiente del listener.