Estratto del documento

Gestione degli eventi

I widget di Android descritti nel "primo" documento sono tutti dotati di una serie di metodi di callback che hanno nomi nella forma onTipoEvento(). Questi metodi sono richiamati ogni volta che il corrispondente evento si verifica sul widget. Ad esempio, la classe android.widget.Button() è dotata del metodo onTouchEvent(). Il suddetto metodo è eseguito ogni qualvolta il bottone è premuto dall'utente.

Tali eventi possono essere ridefiniti dallo sviluppatore (ad esempio per visualizzare dei toast in fase di debugging) creando una nuova classe che estende quella di partenza. Ad esempio:

public class MyButton extends Button {
    public MyButton(Context context) {
        super(context);
    } // costruttore
    
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event); // gestione grafica
        int action = event.getAction();
        if(action == MotionEvent.ACTION_DOWN) {
            Toast toast = Toast.makeText(getContext(), "Bottone cliccato!", Toast.LENGTH_SHORT);
            toast.show();
            return true;
        }
        return false;
    }
}

La ridefinizione dei metodi di callback è una tecnica funzionante ma poco pratica, poiché occorre ridefinire una nuova classe per ogni widget utilizzato. Questo metodo, infatti, è utile quasi esclusivamente quando si vuole creare dei propri componenti custom.

Metodi setOnTipoEventoListener()

Tutti i widget, però, mettono a disposizione un'altra serie di metodi, del tipo setOnTipoEventoListener(). Attraverso questa tipologia di metodi si possono "affiancare" al widget dei listener di eventi, istanze di classi particolari che hanno il preciso scopo di ricevere le notifiche di vari eventi (ad esempio il tocco su un bottone).

Per ciascun differente tipo di listener esiste un'apposita interfaccia Java che lo sviluppatore dovrà creare per gestire il proprio evento. Ad esempio, l'interfaccia per gli eventi di click è:

android.view.View.OnClickListener

Nel caso specifico, il metodo da ridefinire è:

public abstract void onClick(View v);

Esempio di implementazione

package corso.test;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MyClickListener implements OnClickListener {
    public void onClick(View view) {
        Toast toast = Toast.makeText(view.getContext(), "Bottone cliccato!", Toast.LENGTH_SHORT);
        toast.show();
    }
}
package corso.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button button = new Button(this);
        button.setText("Premi");
        button.setOnClickListener(new MyClickListener());
        LinearLayout layout = new LinearLayout(this);
        layout.setGravity(Gravity.CENTER);
        layout.addView(button);
        setContentView(layout);
    }
    …
}

Riduzione del codice

Per la gestione degli eventi, inoltre, è possibile ridurre le righe di codice necessarie in alcuni modi:

  • Qualunque classe può diventare un listener senza necessariamente scriverne di nuove
  • Usando lo stesso listener di evento per più widget
  • Usare classi anonime

Ad esempio, la stessa classe MainActivity potrebbe implementare OnClickListener, ridefinendo all'interno della classe il metodo public void onClick(View v). Presupponendo di utilizzare due bottoni differenti, il suddetto metodo potrebbe eseguire del codice differente a seconda del bottone schiacciato.

Oppure, è possibile utilizzare classi anonime, come nel seguente esempio:

Eventi gestibili sui widget

I principali eventi gestibili sui widget sono:

  • Click: metodo setOnClickListener() con metodo da ridefinire onClick(View view) il cui parametro è il widget.
Anteprima
Vedrai una selezione di 4 pagine su 11
Event, Intent, Menu e I/O Android Pag. 1 Event, Intent, Menu e I/O Android Pag. 2
Anteprima di 4 pagg. su 11.
Scarica il documento per vederlo tutto.
Event, Intent, Menu e I/O Android Pag. 6
Anteprima di 4 pagg. su 11.
Scarica il documento per vederlo tutto.
Event, Intent, Menu e I/O Android Pag. 11
1 su 11
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Wenress di informazioni apprese con la frequenza delle lezioni di Terminali Mobili e Multimedialità e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Napoli - Parthenope o del prof Di Capua Michele.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community