¿Cómo puedo mostrar una vista de lista en un cuadro de diálogo de alerta de Android?

Resuelto asked hace 54 años • 12 respuestas

En una aplicación de Android, quiero mostrar una vista de lista personalizada en un AlertDialog.

¿Cómo puedo hacer esto?

 avatar Jan 01 '70 08:01
Aceptado

Se utiliza el siguiente código para mostrar una lista personalizada en AlertDialog

AlertDialog.Builder builderSingle = new AlertDialog.Builder(DialogActivity.this);
builderSingle.setIcon(R.drawable.ic_launcher);
builderSingle.setTitle("Select One Name:-");

final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(DialogActivity.this, android.R.layout.select_dialog_singlechoice);
arrayAdapter.add("Hardik");
arrayAdapter.add("Archit");
arrayAdapter.add("Jignesh");
arrayAdapter.add("Umang");
arrayAdapter.add("Gatti");

builderSingle.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String strName = arrayAdapter.getItem(which);
                AlertDialog.Builder builderInner = new AlertDialog.Builder(DialogActivity.this);
                builderInner.setMessage(strName);
                builderInner.setTitle("Your Selected Item is");
                builderInner.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,int which) {
                                dialog.dismiss();
                            }
                        });
                builderInner.show();
            }
        });
builderSingle.show();
karan singh rajpoot avatar Apr 02 '2013 11:04 karan singh rajpoot

Según la documentación , existen tres tipos de listas que se pueden utilizar con AlertDialog:

  1. Lista tradicional de opción única
  2. Lista persistente de opción única (botones de opción)
  3. Lista persistente de opciones múltiples (casillas de verificación)

Daré un ejemplo de cada uno a continuación.

Lista tradicional de opción única

La forma de hacer una lista tradicional de opción única es usar setItems.

ingrese la descripción de la imagen aquí

versión java

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose an animal");

// add a list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
builder.setItems(animals, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
            case 0: // horse
            case 1: // cow
            case 2: // camel
            case 3: // sheep
            case 4: // goat
        }
    }
});

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

No es necesario un botón Aceptar porque tan pronto como el usuario hace clic en un elemento de la lista, el control regresa al archivo OnClickListener.

Versión Kotlin

// setup the alert builder
val builder = AlertDialog.Builder(context)
builder.setTitle("Choose an animal")

// add a list
val animals = arrayOf("horse", "cow", "camel", "sheep", "goat")
builder.setItems(animals) { dialog, which ->
    when (which) {
        0 -> { /* horse */ }
        1 -> { /* cow   */ }
        2 -> { /* camel */ }
        3 -> { /* sheep */ }
        4 -> { /* goat  */ }
    }
}

// create and show the alert dialog
val dialog = builder.create()
dialog.show()

Lista de botones de opción

ingrese la descripción de la imagen aquí

La ventaja de la lista de botones de opción sobre la lista tradicional es que el usuario puede ver cuál es la configuración actual. La forma de hacer una lista de botones de opción es usar setSingleChoiceItems.

versión java

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose an animal");

// add a radio button list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
int checkedItem = 1; // cow
builder.setSingleChoiceItems(animals, checkedItem, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user checked an item
    }
});

// add OK and Cancel buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user clicked OK
    }
});
builder.setNegativeButton("Cancel", null);

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

Codifiqué el elemento elegido aquí, pero puedes realizar un seguimiento con una variable miembro de clase en un proyecto real.

Versión Kotlin

// setup the alert builder
val builder = AlertDialog.Builder(context)
builder.setTitle("Choose an animal")

// add a radio button list
val animals = arrayOf("horse", "cow", "camel", "sheep", "goat")
val checkedItem = 1 // cow
builder.setSingleChoiceItems(animals, checkedItem) { dialog, which ->
    // user checked an item
}


// add OK and Cancel buttons
builder.setPositiveButton("OK") { dialog, which ->
    // user clicked OK
}
builder.setNegativeButton("Cancel", null)

// create and show the alert dialog
val dialog = builder.create()
dialog.show()

Lista de casillas de verificación

ingrese la descripción de la imagen aquí

La forma de hacer una lista de casillas de verificación es usar setMultiChoiceItems.

versión java

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose some animals");

// add a checkbox list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
boolean[] checkedItems = {true, false, false, true, false};
builder.setMultiChoiceItems(animals, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        // user checked or unchecked a box
    }
});

// add OK and Cancel buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user clicked OK
    }
});
builder.setNegativeButton("Cancel", null);

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

Aquí codifiqué los elementos de la lista que ya estaban marcados. Es más probable que desee realizar un seguimiento de ellos en un archivo ArrayList<Integer>. Consulte el ejemplo de documentación para obtener más detalles. También puede configurar los elementos marcados nullsi siempre desea que todo comience sin marcar.

Versión Kotlin

// setup the alert builder
val builder = AlertDialog.Builder(context)
builder.setTitle("Choose some animals")

// add a checkbox list
val animals = arrayOf("horse", "cow", "camel", "sheep", "goat")
val checkedItems = booleanArrayOf(true, false, false, true, false)
builder.setMultiChoiceItems(animals, checkedItems) { dialog, which, isChecked ->
    // user checked or unchecked a box
}

// add OK and Cancel buttons
builder.setPositiveButton("OK") { dialog, which ->
    // user clicked OK
}
builder.setNegativeButton("Cancel", null)

// create and show the alert dialog
val dialog = builder.create()
dialog.show()

Notas

  • Para el contextcódigo anterior, no lo use getApplicationContext()o obtendrá un IllegalStateException(consulte aquí el motivo). En su lugar, obtenga una referencia al contexto de la actividad, como por ejemplo con this.
  • También puede completar los elementos de la lista desde una base de datos u otra fuente usando setAdaptero setCursorpasando a Cursoro ListAdaptera setSingleChoiceItemso setMultiChoiceItems.
  • Si la lista es más larga de lo que cabe en la pantalla, el cuadro de diálogo la desplazará automáticamente. Sin embargo, si tiene una lista muy larga, supongo que probablemente debería crear un cuadro de diálogo personalizado con RecyclerView .
  • Para probar todos los ejemplos anteriores, solo tenía un proyecto simple con un solo botón que mostraba el cuadro de diálogo al hacer clic:

    import android.support.v7.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity {
    
        Context context;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            context = this;
        }
    
        public void showAlertDialogButtonClicked(View view) {
    
            // example code to create alert dialog lists goes here
        }
    }
    

Relacionado

  • Diálogo de alerta de Android con uno, dos y tres botones ingrese la descripción de la imagen aquí
  • Cómo implementar una vista AlertDialog personalizada ingrese la descripción de la imagen aquí
Suragch avatar Apr 21 '2017 01:04 Suragch