Home / Programmazione / Java Android / Usare gli AlertDialog in Android
Mattepuffo

Usare gli AlertDialog in Android

Usare gli AlertDialog in Android

Gli AlertDialog sono dei componenti molto utili per inviare dei messaggi all'utente, anche perchè obbligano l'utente a vedere che c'è un avviso.

Solo che ad essere sincero li trovo più comlicati rispetto ai "cugini" di iOS.

Comunque vediamo di creare una classe che possa rappresentare un AlertDialog generico e che possa essere richiamato ovunque, anche in azioni asincrone.

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;

public class GenericDialog {
    
    public static void createDialog(String message, Context context) {
        final AlertDialog alert = new AlertDialog.Builder(context).create();
        alert.setTitle("ERROR");
        alert.setMessage(message);
        alert.setButton(-3, "OK", new DialogInterface.OnClickListener() {
            
            public void onClick(DialogInterface dialog, int which) {
                alert.cancel();
            }
        });
        alert.show();
    }
}

C'è un solo metodo statico che richiede due parametri: il messaggio e il contesto in cui deve essere richiamato.

Questo secondo parametro è essenziale se si vuole richiamarlo in contesti asincroni.

 

Il codice non è molto complesso; il -3 che sta come primo parametro in setButton serve ad indicare che vogliamo aggiungere un pulsante di tipo NEUTRAL_BUTTON.

Sulla documentazione potete vedere che ci stanno anche il POSITIVE_BUTTON e NEGATIVE_BUTTON.

Vediamo un esempio di richiamo in modo asincrono:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnLogin = (Button) findViewById(R.id.btn_login);
        btnLogin.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                new AsyncConnection().execute("");
            }
        });
    }

    private class AsyncConnection extends AsyncTask<Object, Object, Object> {

        private String response = null;

        @Override
        protected Object doInBackground(Object... arg0) {
            // DO STUFF
            return null;
        }

        @Override
        protected void onPostExecute(Object result) {
            if (response.equals("1")) {
                Intent i = new Intent(MainActivity.this, BancaActivity.class);
                startActivity(i);
            } else {
                GenericDialog.createDialog("User or password wrong", MainActivity.this);
            }
        }
    }

}

Qui viene lanciata la classe asincrona con il suo metodo doInBackground e vengono eseguite delle operazioni che danno il risultato.

Questo risultato viene elaborato dal metodo onPostExecute in maniera automatica alla fine dell'altro metodo.

Se la risposta non è 1 l'utente viene avverti dal dialgo creato sopra.