DevCorner: utilizziamo l'alert dialog

Giuseppe Tripodi
Giuseppe Tripodi Tech Master
DevCorner: utilizziamo l'alert dialog

Per l'appuntamento di questa settimana con DevCorner parliamo di una cosa tanto semplice quando fondamentale nella realizzazione di una buon software Android: gli alert. Sebbene non abbiano bisogno di presentazioni, specifichiamo che si tratta di quelle piccole finestre che si aprono come popup, solitamente per chiedere conferma di un'azione. Vediamo quindi insieme come realizzarle.

Anche questa volta, possiamo prendere come base di partenza Hello(Android)World, app che abbiamo realizzando durante i vecchi tutorial. Per prima cosa, per vedere apparire l'alert aggiungiamo un bottone in alto a destra con la scritta Chiudi: per inserire del testo, creiamo l'apposita Stringa come spiegato qualche settimana fa.

Nella nostra MainActivity.xml, inseriamo quindi quanto segue:

   

<Button
android:id="@+id/chiudi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="@string/chiudi" />

A questo punto, dal codice della MainActivity andiamo a definire il bottone appena creato, identificandolo con l'ID che gli abbiamo assegnato:

Button chiudi = (Button) findViewById(R.id.chiudi);

e creiamo un nuovo OnClickListener che faccia apparire l'alert quando clicchiamo sul tasto: qui dovremo definire il titolo e il testo della dialog, nonché i due bottoni per confermare e annullare.

Tutte queste informazioni vanno inserite nei metodi appositi, in particolare:

  • setTitle:  il titolo che vogliamo appaia sulla dialog
  • setMessage:  la domanda che vogliamo porre all'utente
  • setPositiveButton:  il testo sul bottone di conferma e l'azione da eseguire al click
  • setNegativeButton: il testo sul bottone di annullamento e l'azione da eseguire al click

In questo caso, visto che l'azione che il bottone deve eseguire è chiudere l'applicazione, scriveremo

MainActivity.this.finish()

in caso di risposta positiva e

dialog.cancel();

che non farà altro che chiudere la dialog box, nel caso l'utente risponda di no.

Il codice finale da inserire nella MainActivity, dopo aver importato le librerie necessarie con i canonici Ctrl+Shift+O, dovrà essere qualcosa di simile:

package com.example.helloandroidworld;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	Context ctx = this;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button chiudi = (Button) findViewById(R.id.chiudi);
		chiudi.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ctx);
					alertDialogBuilder.setTitle("Alert di prova");
					//inseriamo qui il titolo della Dialog Box
		 			alertDialogBuilder
						.setMessage("Sei sicuro di voler uscire?")
						//inseriamo qui la domanda da porre all'utente
						.setCancelable(false)
						.setPositiveButton("Sì",new DialogInterface.OnClickListener() {
							//scriviamo qui il testo del bottone per confermare e l'azione da eseguire
							public void onClick(DialogInterface dialog,int id) {
							MainActivity.this.finish();
							}
						  })
						.setNegativeButton("No",new DialogInterface.OnClickListener() {
							//scriviamo qui il testo del bottone per annullare e l'azione da eseguire
							public void onClick(DialogInterface dialog,int id) {
								dialog.cancel();
							}
						});
						AlertDialog alertDialog = alertDialogBuilder.create();
						alertDialog.show();
						//con questi due metodi viene effettivamente generato l'alert e successivamente mostrato
			}
		});
	}

}

Attenzione particolare meritano le righe 15 e 26, dove facciamo utilizzo del Context: si tratta di un oggetto che identifica un'Activity (nel nostro caso quella attuale, visto che l'abbiamo posto a this): lo si utilizza molto spesso, in quanto richiesto da diversi metodi che lo richiedono, come l'AlertBuilder a cui passiamo il nostro Context di nome ctx.

alert

Anche per questa settimana l'appuntamento è terminato: adesso avete le conoscenze necessarie per "allertare" i vostri utenti, chiedere conferma per un'azione o quant'altro. Come sempre, in caso di dubbi sul codice, di mancato funzionamento dell'app o per scaricare i codici sorgenti completi vi rimandiamo al nostro forum.