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ó.
- CheckBox cambia el valor dos veces
- ¿Eliminar y editar elementos de la lista en android?
- ¿Cómo implementaron las noticias Android BBC y las aplicaciones Pulse news la vista de desplazamiento horizontal?
- IllegalStateException: El contenido del adaptador ha cambiado pero ListView no recibió una notificación
- Los datos extraídos de FirebaseDatabase se muestran en 3 AlertDialogs separados en lugar de uno
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();
- Nullpointerexception en getView de ArrayAdapter personalizado
- Conjunto de datos grande con ArrayAdapter y ListView en Android
- ArrayAdapter personalizado setBackground en getView
- ¿Cómo limpiar un ArrayAdapter?
- AutoCompleteTextView no completar palabras entre paréntesis
- Actualización de elementos de Android ArrayAdapter
- ¿Cómo funciona el método getView () de ArrayAdapter?
- Cómo llamar a notifyDataSetChanged () de AsyncTask onPostExecute () en otra clase
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.