studio example custom android android-alertdialog

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



input dialog android (9)

¿No es más fácil crear 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 una aplicación de Android, quiero mostrar una vista de lista personalizada en un AlertDialog.

¿Cómo puedo hacer esto?


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

Haré lo que hace básicamente

  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 la clase de Dialog de Android
  3. Agrega un estilo personalizado y texto basado en el archivo XML
  4. Llama al método dialog.show() .

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() }


Esto es demasiado 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();


Puede utilizar un diálogo personalizado.

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

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ListView android:id="@+id/lv" android:layout_width="wrap_content" android:layout_height="fill_parent"/> </LinearLayout>

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:

Utilizando 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<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names); lv.setAdapter(adapter); alertDialog.show();

custom.xml

<?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listView1" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView>

Chasquido


Se utiliza el siguiente 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<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();


Utilice " import android.app.AlertDialog; " importar y luego escribir

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();


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

  1. Lista tradicional de una sola elección
  2. Lista de selección única persistente (botones de opción)
  3. Lista de selección múltiple persistente (casillas de verificación)

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

Lista tradicional de una sola elección

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

// 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 el control de un elemento de la lista, se devuelve a OnClickListener .

Lista de botones de radio

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 seguirlo con una variable miembro de clase en un proyecto real.

Lista de casillas de verificación

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

Notas

  • Para el context en el código anterior, no use getApplicationContext() o obtendrá una IllegalStateException (vea here por qué). En su lugar, obtenga una referencia al contexto de la actividad, como con this .
  • También puede rellenar los elementos de la lista desde una base de datos u otra fuente utilizando 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 lo desplazará automáticamente. Sin embargo, si tiene una lista muy larga, supongo que probablemente debería hacer un diálogo personalizado con un RecyclerView .
  • Para probar todos los ejemplos anteriores, solo tuve un proyecto simple con un solo botón que mostró el diálogo cuando se hizo 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


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();