AlertDialog de opción múltiple con el adaptador de encargo

Estoy intentando crear un AlertDialog con la opción de la opción múltiple. He intentado con el setMultiChoiceItems pero lo que tengo es un ArrayList<Category> y no un CharSequence así que intenté con el adaptador.

El problema con setAdapter es que cuando selecciono un elemento se cierra la ventana de diálogo. Y lo que quiero es seleccionar los elementos y, a continuación, pulse el botón Aceptar para ver qué elementos donde se seleccionó.

 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Pick a color"); ArrayAdapter<Category> catsAdapter = new ArrayAdapter<Category>(this, android.R.layout.select_dialog_multichoice,this.categories); builder.setAdapter(catsAdapter, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { } }); builder.setPositiveButton("Save", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //do something } });; AlertDialog alert = builder.create(); alert.show(); 

Desafortunadamente, no parece ser una manera fácil de alternar en el multichoicemode de AlertDialog sin llamar a setMultiChoiceItems() .

Sin embargo, puede configurar un adaptador y, a continuación, activar el modo multichoice en el propio ListView .

 final AlertDialog dialog = new AlertDialog.Builder(getActivity()) .setTitle("Title") .setAdapter(yourAdapter, null) .setPositiveButton(getResources().getString(R.string.positive), null) .setNegativeButton(getResources().getString(android.R.string.cancel), null) .create(); dialog.getListView().setItemsCanFocus(false); dialog.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); dialog.getListView().setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // Manage selected items here System.out.println("clicked" + position); CheckedTextView textView = (CheckedTextView) view; if(textView.isChecked()) { } else { } } }); dialog.show(); 

Vea abajo el código que puede ayudarle. He utilizado esto en mi aplicación.

 public static ArrayList<String> Party_list_new = new ArrayList<String>(); ArrayList<String> party_multi_cheked = new ArrayList<String>(); public void show_alert() { final Dialog dia = new Dialog(this); dia.setContentView(R.layout.alert_); dia.setTitle("Select File to import"); dia.setCancelable(true); final ListView list_alert = (ListView) dia .findViewById(R.id.alert_list); list_alert.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_multiple_choice, Party_list_new)); list_alert.setItemsCanFocus(false); list_alert.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); list_alert.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) { } }); Button btn = (Button) dia.findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { SparseBooleanArray positions = list_alert .getCheckedItemPositions(); int j = 0; for (int k = 0; k < Party_list_new.size(); k++) { if (positions.get(k)) { party_multi_cheked.add("" + k); } } dia.dismiss(); } }); dia.show(); } 

Alert_list.xml

  <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Select Party" /> <ListView android:id="@+id/alert_list" android:layout_width="match_parent" android:padding="5dp" android:layout_height="wrap_content" > </ListView> </LinearLayout> 

Hazlo bien si es correcto.

Esto impedirá que el diálogo de ur desaparezca después de una selección.

 AlertDialog alertDialog = builder.create(); ListView listView = alertDialog.getListView(); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub } }); 

Para obtener qué elementos están seleccionados, debe planificar su adaptador en consecuencia.

  • Actualizar datos en Arrayadapter
  • (Unidad) Prueba de ArrayAdapter
  • Cómo crear personalizado BaseAdapter para AutoCompleteTextView
  • Texto sobrepuesto de Android en el adaptador
  • ¿Por qué getView devuelve objetos convertView incorrectos en SeparatedListAdapter?
  • Cómo llamar a la función de la actividad principal de ArrayAdapter personalizado?
  • Cómo agregar el diseño personalizado a Arrayadapter?
  • ¿Qué es android.R.layout.simple_list_item_1?
  • ArrayAdapter de Listview Arregla () redibujo muy lento de notificydatasetchanged
  • ¿Qué es un textViewResourceId?
  • Adaptador de matriz de Android con ArrayList y ListView no se actualizan cuando se cambia el arraylist
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.