Gestire il tocco su di un bottone

In questo tutorial vedremo le prime importanti istruzioni java da usare, per rendere cliccabile un pulsante precedentemente inserito all'interno di un layout.

tempo tutorialTi servono: 15 minuti

gestore clickOra che abbiamo progettato il nostro primo layout, con alcuni degli elementi tipici di una app, come il testo, le immagini e i bottoni, vediamo come modificare il codice del file java associato alla nostra Activity, in modo da inserire una delle azioni più semplice, ma al tempo stesso più importanti, per una applicazione: il passaggio da una pagina ad un'altra sulla base del click o tocco effettuato su di un un elemento della nostra app, tipicamente associato ad un bottone, immagine o riga di un elenco di informazioni (vedi Liste)

Cosa imparerai

Vedremo due importanti metodi di java:

  • Imparerai ad individuare nel codice, le risorse inserite nei file xml tramite l'uso del metodo: findViewById()
  • Imparerai a scrivere nel codice java, le righe per aggiungere un gestore di evento Click su di un elemento del nostro layout.

Come visto nel tutorial "Il primo passo prima di chiamare una Activity", l'istruzione che permette di far apparire magicamente il nostro primo layout, nel caso della figura sopra, quello associato alla pagina MainActivity.java, è il metodo setContentView(pagina_da_mostrare), dove "pagina_da_mostrare", non è altro che un riferimento alla risorsa che si vuole prelevare, ossia il nostro layout o file .xml di nome main_activity.xml (R.layout.main_activity).

public class PrimaPagina extends Activity {    
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main_activity);  
....  

Tutto questo codice, ti ricordo, è inserito in automatico da Android Studio, non appena creiamo un progetto con una Activity. In realtà potrebbe essere leggermente diverso, in quanto con l'avvento di Android 6 MarshMallow, la classe che viene creata, è un'estensione della classe AppCompactActivity (sua figlia):

protected class PrimaPagina extends AppCompactActivity {    
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main_activity);  
....  

e questo per poter inserire la barra degli strumenti in alto all'applicazione, e renderla compatibile con vecchie versioni di Android. Qui sotto puoi vedere il risultato nell'usare "extends AppCompactActivity" e quello in cui si usa la classica "extends Activity".

Il passo successivo è quello di scrivere le istruzioni necessarie a rendere "intelligente", il bottone inserito nel layout sviluppato nel precedente tutorial: Creare una pagina con Bottone.

La prima domanda da farsi quindi è: come faccio a identificare il bottone con delle istruzioni java inserite nel codice, per poi aggiungergli delle istruzioni che lo rendano sensibile al tocco?

Identificare il Bottone tramite l'id: findViewById()

Ogni componente inserito all'interno del layout della nostra pagina, ha un importante attributo, che è possibile visualizzare aprendo direttamente il file .xml Questo attributo è l'id, un pò come accade con le pagine web, quando vado a definire l'attributo di id per un tag, al fine di poterlo referenziare con i CSS, o javaScript o jQuery.

Se infatti rivediamo il codice xml del bottone inserito:

<Button android:id="@+id/button1"  
 android:layout_width="wrap_content"  
 android:layout_height="wrap_content"  
 android:layout_marginTop="10dp"   
 android:text="GO!" />

noteremo nella prima riga che esiste l'attributo id e che ha uno specifico valore pari a "button1".

Questo cosa significa? Significa che per identificare nel codice java, questo bottone, potrò usare proprio il suo nome definito nell'attributo id. Questa è una regola che si applica non solo ai bottoni, ma a qualsiasi elemento che andrai ad inserire nel tuo layout. 

La prima regola importante che è necessario imparare quindi è: assegna sempre un nome all'attributo id di ogni elemento che andrai ad inserire nel tuo layout. 

Ma a livello di codice come posso riferirmi a questo pulsante? Si può usare un metodo findViewById(), il quale risponde sostanzialmente alla domanda: cerca l'elemento con attributo id specificato tra parentesi. Ma noi già sappiamo come identificare le risorse nella cartella "res", quindi basterà scrivere:

findViewById(R.id.button1);

Nota il punto e virgola finale: questa è un'altra caratteristica del linguaggio java, che imparerai a conoscere bene .

Trasportare le risorse in più punti del codice: le VARIABILI

Anche se presumo tu abbia già delle basi di programmazione, vediamo per i meno esperti un altro concetto importante, ossia quello di variabile.

Così come usiamo le bottiglie per trasportare il vino o l'olio, anche in java e' possibile usare delle bottiglie. E' una semplificazione, ma gisuto per capire il concetto. Il nostro vino, è il bottone che siamo riusciti ad individuare. Per poterlo spostare e usare in più punti  del programma, dobbiamo inserirlo all'interno di una bottiglia, che nel linguaggio della programmazione, prende il nome di variabile.

Le variabili posso avere i nomi che decidi tu, ma devi rispettare alcune regole base, come non iniziare con numeri, non usare caratteri non alfanumerici, spazi etc. Ad esempio: indirizzo, potrebbe essere il nome di una variabile.

Così come il bravo imbottigliatore, prende l'imbuto per travasare il vino da una botte alla bottiglia, allo stesso modo, il programmatore usa il simbolo = per "travasare" del contenuto (in realtà non è proprio cos' ma giusto per semplificare)

Pertanto se la mia bottiglia si chiamasse, btnHome, per "travasare" il bottone identificato in precedenza, si userà:

// Identifico il bottone Button1 e lo travaso in una variabile
btnHome = findViewById(R.id.button1);

Questo il codice che abbiamo scritto fino ad ora:

public class AndroidTutorial extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // Identifico il bottone tramite il proprio id, Button1
        Button btnHome=(Button)findViewById(R.id.button1);

Gestire il CLICK/TOCCO su di un bottone: setOnClickListener()

A questo punto non ci rimane che trovare un sistema per rendere questo bottone "intelligente" e fare in modo che si accorga se qualcuno lo tocca. Per fare questo si devono introdurre i gestori di evento in Android. In sostanza funzionano come degli allarmi: non appena scattano, significa che l'evento che stavo monitorando si è verificato e posso prendere delle decisioni. 

Per rendere sensibile al click il nostro bottone identificato con la variabile di nome btnHome, dovremo allora scrivere:

//aggiungo una "sentinella" al bottone - gestore di evento
btnHome.setOnClickListener(...)

dove all'interno delle parentesi dovremo inserire una serie di altre istruzioni che verranno eseguite solo al verificarsi dell'evento monitorato.

btnHome.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0) {
    // azioni da fare   
}
});

Non prendere paura per il codice. Ti diventerà familiare molto velocemente e soprattutto non dovrai ricordarlo a memoria non appena lo inseriremo all'interno della nostra lista di snippet di codice da usare velocemente (vedi tutorial sulla creazione di snippet di codice). 

E cosa dobbiamo fare non appena si verifica questo evento? Dovremo aprire una nuova pagina, quindi una nuova Activity, che avremo cura di identificare in modo apportuno. Pertanto il codice completo che dovremo scrivere sarà:

public class AndroidTutorial extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btnHome=(Button)findViewById(R.id.button1);
        btnHome.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View arg0) {
                        startActivity(...);
                    }
                });
    }
}

Le righe che vedi qui sopra  non contengono elementi personalizzati, nel senso che sono righe standard, quindi le potrai copiare e incollare in ogni tuo progetto per ottenere lo stesso risultato. La nuova istruzione che non abbiamo ancora visto è quello che ci permette di avviare una nuova Activity, quindi di "lanciare" il file java, grazie al quale verrà prelevato il layout da mostrare al navigatore.

Tutto questo si fa usando il metodo startActivity(), che inizieremo ad approfondire dal prossimo tutorial. 

 

Tipo/Autore: Pubblicato da: CorsoAndroid.it

© 2011-2024 CorsoAndroid.it - Tutti i diritti riservati. Corso Base Android per rompere il ghiaccio Creare app per android
NB: Tutti i marchi citati sono di proprietà dei rispettivi proprietari. Android is a trademark of Google Inc.