La gestione degli eventi in Android Studio
In Android Studio per gestire gli eventi dell'applicazione si usano i metodi Java.
Cos'è un evento? E' una particolare situazione o azione dell'utente (es. click sul pulsante) a cui è associata una risposta da parte dell'app (es. cambio di schermata).
Ci sono due strade possibili per associare un evento a una risposta dell'applicazione, in modo dichiarativo o programmatico
Come gestire gli eventi in modo dichiarativo
Aggiungo un oggetto sul layout dell'applicazione. Ad esempio un pulsante (button).
Seleziono l'oggetto e digito il nome del metodo nell'attributo onClick
Nota. In questo sto gestendo il click dell'utente sul pulsante come evento.
Nel codice XML del layout ( activity_main.xml ) viene aggiunta automaticamente la riga android:onClick="metodo1".
In pratica, viene associato l'evento onClick al metodo "metodo1".
Nota. Avrei anche potuto digitare manualmente la riga android:onClick="metodo1" nel file activity_main.xml. In questo caso sarebbe stato l'attributo onClick ad aggiornarsi automaticamente nella sezione Attributes.
Quando nel runtime si verifica l'evento (onClick) sull'oggetto Button, l'applicazione esegue il metodo indicato (metodo1).
Tuttavia, il metodo ancora non esiste.
Apro il file ActivityMain.java per implementare il metodo nel codice Java.
Il metodo accetta un oggetto View come argomento che viene documentato automaticamente da Android nel runtime.
Quando l'oggetto View appare di colore rosso, vuol dire che la classe dell'oggetto non è stata ancora importata.
Per importare la classe sposto il puntatore del mouse sulla scritta rossa e seleziono Import class.
Nota. In alternativa, posso importare la classe premendo sui tasti ALT+Invio dopo aver selezionato la scritta rossa oppure digitando manualmente l'istruzione import nel codice java.
Nel codice java viene aggiunto il comando import android.view.View che importa la classe View.
L'oggetto View diventa di colore nero.
A questo punto devo soltanto scrivere il codice dentro il metodo, ossia cosa deve fare l'app quando l'utente clicca sul bottone.
Ad esempio, uso il comando System.out.println per scrivere qualcosa sulla console.
In questo modo, quando l'utente clicca sul pulsante, il programma scrive "hai cliccato" nella console.
Come gestire gli eventi in modo programmatico
Dopo aver aggiunto gli oggetti nel layout (es. button, textview, ecc) posso gestire gli eventi lavorando direttamente sul MainActivity.java.
I metodi vanno scritti dopo aver caricato in memoria tutti gli elementi del layout con il comando SetContentView.
In questo modo ogni elemento del layout è un oggetto a cui posso associare un riferimento (reference).
Ad esempio, associo il riferimento del pulsante button all'oggetto prova.
Nota. Quando il runtime di Android legge il file di layout dell'applicazione, genera una classe R.java contenente tutte le rappresentazioni degli oggetti del layout. In questo modo è possibile reperire la vista di ogni oggetto del layout.
Va aggiunto al codice java anche l'import della classe button.
Nota. Eventualmente, per sicurezza potrei anche aggiungere un controllo assert prova != null; per verificare che l'oggetto prova non sia nullo. In questo modo se l'oggetto è nullo l'app si chiude. Per semplicità lo ometto in questo esempio.
Ora utilizzo il metodo setOnClickListener per rilevare e modificare la vista dall'oggetto.
In questo caso l'oggetto da "ascoltare" è un pulsante mentre l'evento è il click.
Nota. L'oggetto setOnClickListener usa il riferimento "prova" per rilevare la vista e le informazioni dell'elemento button del layout. Inoltre, richiede l'import della classe View nel codice JAva.
All'interno sviluppo i metodi che generano le azioni dell'applicazione quando viene rilevato l'evento "click".
Ad esempio, il metodo onClick stampa di un messaggio "Hello World" in console.
Come funziona
Quando un utente clicca sul pulsante nel runtime, l'applicazione stampa un messaggio "Hello World" in console.
E così via