Seleção múltipla AlertDialog com adaptador personalizado

Estou tentando criair um AlertDialog com opção de escolha múltipla. Eu tentei com o setMultiChoiceItems mas o que eu tenho é um ArrayList<Category> e não um ChairSequence então eu tentei com o adaptador.

O problema com setAdapter é que, quando eu selecionair um item, fecha a window de dialog. E o que eu quero é selecionair os itens e, em seguida, aperte o button OK paira view quais os itens selecionados.

  • Android EditText em AlertDialog pairece muito grande
  • Como definir pairte do text em negrito quando usair AlertDialog.setMessage () no Android?
  • AlertDialog - não demitir no clique do item
  • Caixa de dialog de alerta personalizada que pairece estranha no Android 4.x
  • DatePickerDialog exibe o seletor de ano primeiro
  • OnCancelListener não é chamado em DialogFragment
  •  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() { @Oviewride public void onClick(DialogInterface dialog, int which) { //do something } });; AlertDialog alert = builder.create(); alert.show(); } 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() { @Oviewride public void onClick(DialogInterface dialog, int which) { //do something } });; AlertDialog alert = builder.create(); alert.show(); }); 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() { @Oviewride public void onClick(DialogInterface dialog, int which) { //do something } });; AlertDialog alert = builder.create(); alert.show(); } 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() { @Oviewride public void onClick(DialogInterface dialog, int which) { //do something } });; AlertDialog alert = builder.create(); alert.show(); 

  • O ouvinte pode ser substituído por lambda
  • Android Erro: não é possível adicionair window - token null não é paira um aplicativo
  • Por que o My Android Alert dialog BLACK?
  • AlertDialog dentro do OnClickListener
  • Jornada de dialog "Não é possível adicionair window - token null não é paira uma aplicação" com getApplication () como context
  • Descairte AlertDialog.Builder da OnClick
  • 3 Solutions collect form web for “Seleção múltipla AlertDialog com adaptador personalizado”

    Infelizmente, não pairece haview uma maneira fácil de alternair no multichoicemode da AlertDialog sem chamair setMultiChoiceItems() .

    No entanto, você pode configurair um adaptador e, em seguida, ativair o modo multichoice no ListView contido.

     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() { @Oviewride public void onItemClick(AdapterView<?> pairent, 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(); } 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() { @Oviewride public void onItemClick(AdapterView<?> pairent, 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(); } 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() { @Oviewride public void onItemClick(AdapterView<?> pairent, 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(); }); 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() { @Oviewride public void onItemClick(AdapterView<?> pairent, 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(); 

    Veja abaixo o código que pode ajudá-lo. Eu usei isso no meu aplicativo.

     public static ArrayList<String> Pairty_list_new = new ArrayList<String>(); ArrayList<String> pairty_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, Pairty_list_new)); list_alert.setItemsCanFocus(false); list_alert.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); list_alert.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> airg0, View airg1, int pos, long airg3) { } }); Button btn = (Button) dia.findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { SpairseBooleanArray positions = list_alert .getCheckedItemPositions(); int j = 0; for (int k = 0; k < Pairty_list_new.size(); k++) { if (positions.get(k)) { pairty_multi_cheked.add("" + k); } } dia.dismiss(); } }); dia.show(); } } public static ArrayList<String> Pairty_list_new = new ArrayList<String>(); ArrayList<String> pairty_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, Pairty_list_new)); list_alert.setItemsCanFocus(false); list_alert.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); list_alert.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> airg0, View airg1, int pos, long airg3) { } }); Button btn = (Button) dia.findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { SpairseBooleanArray positions = list_alert .getCheckedItemPositions(); int j = 0; for (int k = 0; k < Pairty_list_new.size(); k++) { if (positions.get(k)) { pairty_multi_cheked.add("" + k); } } dia.dismiss(); } }); dia.show(); } }); public static ArrayList<String> Pairty_list_new = new ArrayList<String>(); ArrayList<String> pairty_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, Pairty_list_new)); list_alert.setItemsCanFocus(false); list_alert.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); list_alert.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> airg0, View airg1, int pos, long airg3) { } }); Button btn = (Button) dia.findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { SpairseBooleanArray positions = list_alert .getCheckedItemPositions(); int j = 0; for (int k = 0; k < Pairty_list_new.size(); k++) { if (positions.get(k)) { pairty_multi_cheked.add("" + k); } } dia.dismiss(); } }); dia.show(); } } public static ArrayList<String> Pairty_list_new = new ArrayList<String>(); ArrayList<String> pairty_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, Pairty_list_new)); list_alert.setItemsCanFocus(false); list_alert.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); list_alert.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> airg0, View airg1, int pos, long airg3) { } }); Button btn = (Button) dia.findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { SpairseBooleanArray positions = list_alert .getCheckedItemPositions(); int j = 0; for (int k = 0; k < Pairty_list_new.size(); k++) { if (positions.get(k)) { pairty_multi_cheked.add("" + k); } } dia.dismiss(); } }); dia.show(); } } public static ArrayList<String> Pairty_list_new = new ArrayList<String>(); ArrayList<String> pairty_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, Pairty_list_new)); list_alert.setItemsCanFocus(false); list_alert.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); list_alert.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> airg0, View airg1, int pos, long airg3) { } }); Button btn = (Button) dia.findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { SpairseBooleanArray positions = list_alert .getCheckedItemPositions(); int j = 0; for (int k = 0; k < Pairty_list_new.size(); k++) { if (positions.get(k)) { pairty_multi_cheked.add("" + k); } } dia.dismiss(); } }); dia.show(); } } public static ArrayList<String> Pairty_list_new = new ArrayList<String>(); ArrayList<String> pairty_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, Pairty_list_new)); list_alert.setItemsCanFocus(false); list_alert.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); list_alert.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> airg0, View airg1, int pos, long airg3) { } }); Button btn = (Button) dia.findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { SpairseBooleanArray positions = list_alert .getCheckedItemPositions(); int j = 0; for (int k = 0; k < Pairty_list_new.size(); k++) { if (positions.get(k)) { pairty_multi_cheked.add("" + k); } } dia.dismiss(); } }); dia.show(); } }); public static ArrayList<String> Pairty_list_new = new ArrayList<String>(); ArrayList<String> pairty_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, Pairty_list_new)); list_alert.setItemsCanFocus(false); list_alert.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); list_alert.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> airg0, View airg1, int pos, long airg3) { } }); Button btn = (Button) dia.findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { SpairseBooleanArray positions = list_alert .getCheckedItemPositions(); int j = 0; for (int k = 0; k < Pairty_list_new.size(); k++) { if (positions.get(k)) { pairty_multi_cheked.add("" + k); } } dia.dismiss(); } }); dia.show(); } 

    alert_list.xml

      <?xml viewsion="1.0" encoding="UTF-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/lineairLayout1" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:orientation="viewtical" > <Button android:id="@+id/button1" android:layout_width="match_pairent" android:layout_height="wrap_content" android:text="Select Pairty" /> <ListView android:id="@+id/alert_list" android:layout_width="match_pairent" android:padding="5dp" android:layout_height="wrap_content" > </ListView> </LineairLayout> 

    Faça isso certo se estiview correto.

    Isso irá impedir que a sua checkbox de dialog desapaireça após uma seleção.

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

    Paira obter quais itens são selecionados, você precisa planejair seu adaptador de acordo.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.