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

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

¿Cómo puedo hacer esto?

Se usa debajo del código para mostrar la 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 arrayAdapter = new ArrayAdapter(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(); 

Puede usar un diálogo personalizado.

Diseño de diálogo personalizado. list.xml

     

En tu actividad

 Dialog dialog = new Dialog(Activity.this); dialog.setContentView(R.layout.list) ListView lv = (ListView ) dialog.findViewById(R.id.lv); dialog.setCancelable(true); dialog.setTitle("ListView"); dialog.show(); 

Editar:

Usando alertdialog

 String names[] ={"A","B","C","D"}; AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this); LayoutInflater inflater = getLayoutInflater(); View convertView = (View) inflater.inflate(R.layout.custom, null); alertDialog.setView(convertView); alertDialog.setTitle("List"); ListView lv = (ListView) convertView.findViewById(R.id.lv); ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,names); lv.setAdapter(adapter); alertDialog.show(); 

custom.xml

    

Chasquido

enter image description here

De acuerdo con la documentación , hay tres tipos de listas que se pueden usar con un AlertDialog :

  1. Lista tradicional de elecció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 elección única

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

enter image description here

 // 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 hay necesidad de un botón Aceptar porque, tan pronto como el usuario haga clic en un elemento de lista, se devuelve el OnClickListener al OnClickListener .

Lista de botones de radio

enter image description here

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 setSingleChoiceItems es usar setSingleChoiceItems .

 // 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 podría hacer un seguimiento de él con una variable de miembro de clase en un proyecto real.

Lista de casillas de verificación

enter image description here

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

 // 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é con precisión los elementos de la lista que ya estaban marcados. Es más probable que desee realizar un seguimiento de ellos en un ArrayList . Vea el ejemplo de documentación para más detalles. También puede establecer que los elementos marcados sean null si siempre quiere que todo se inicie sin marcar.

Notas

  • Para el context en el código anterior, no use getApplicationContext() o obtendrá una IllegalStateException (vea aquí por qué). En cambio, obtenga una referencia al contexto de actividad, como con this .
  • También puede llenar los elementos de la lista desde una base de datos u otra fuente usando setAdapter o setCursor o pasando un Cursor o ListAdapter a setSingleChoiceItems o setMultiChoiceItems .
  • Si la lista es más larga de lo que cabe en la pantalla, el cuadro de diálogo se desplazará automáticamente. Sin embargo, si tiene una lista muy larga, supongo que probablemente deba hacer un diálogo personalizado con un RecyclerView .
  • Para probar todos los ejemplos anteriores, simplemente tenía un proyecto simple con un solo botón que el que mostraba el diálogo cuando hacía 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 enter image description here
  • Cómo implementar una vista AlertDialog personalizada enter image description here
 final CharSequence[] items = {"A", "B", "C"}; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Make your selection"); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { // Do something with the selection mDoneButton.setText(items[item]); } }); AlertDialog alert = builder.create(); alert.show(); 

Utilice la import android.app.AlertDialog;import android.app.AlertDialog; ” import y luego escriba

  String[] items = {"...","...."}; AlertDialog.Builder build = new AlertDialog.Builder(context); build.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //do stuff.... } }).create().show(); 

Como principiante, te sugiero que veas http://www.mkyong.com/android/android-custom-dialog-example/

Voy a agotar lo que básicamente hace

  1. Crea un archivo XML para el diálogo y la actividad principal
  2. En la actividad principal en el lugar requerido crea un objeto de Dialog clase android
  3. Agrega estilo personalizado y texto basado en el archivo XML
  4. Llama al método dialog.show() .

Esto es muy simple

 final CharSequence[] items = {"Take Photo", "Choose from Library", "Cancel"}; AlertDialog.Builder builder = new AlertDialog.Builder(MyProfile.this); builder.setTitle("Add Photo!"); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { if (items[item].equals("Take Photo")) { getCapturesProfilePicFromCamera(); } else if (items[item].equals("Choose from Library")) { getProfilePicFromGallery(); } else if (items[item].equals("Cancel")) { dialog.dismiss(); } } }); builder.show(); 

¿No es más fácil hacer que se llame un método después de la creación de la unidad EditText en un AlertDialog, para uso general?

 public static void EditTextListPicker(final Activity activity, final EditText EditTextItem, final String SelectTitle, final String[] SelectList) { EditTextItem.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(SelectTitle); builder.setItems(SelectList, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int item) { EditTextItem.setText(SelectList[item]); } }); builder.create().show(); return false; } }); } 

En Kotlin:

 fun showListDialog(context: Context){ // setup alert builder val builder = AlertDialog.Builder(context) builder.setTitle("Choose an Item") // add list items val listItems = arrayOf("Item 0","Item 1","Item 2") builder.setItems(listItems) { dialog, which -> when (which) { 0 ->{ Toast.makeText(context,"You Clicked Item 0",Toast.LENGTH_LONG).show() dialog.dismiss() } 1->{ Toast.makeText(context,"You Clicked Item 1",Toast.LENGTH_LONG).show() dialog.dismiss() } 2->{ Toast.makeText(context,"You Clicked Item 2",Toast.LENGTH_LONG).show() dialog.dismiss() } } } // create & show alert dialog val dialog = builder.create() dialog.show() }