与自定义适配器多选AlertDialog

我正在尝试创build一个AlertDialog与多项select选项。 我已经尝试了setMultiChoiceItems但是我有一个ArrayList<Category>而不是一个CharSequence所以我尝试使用适配器。

setAdapter的问题是,当我select一个项目,它closures对话窗口。 而我想要的是select的项目,然后点击确定button,看看哪些项目select。

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

Solutions Collecting From Web of "与自定义适配器多选AlertDialog"

不幸的是,在不调用setMultiChoiceItems()的情况下,似乎并没有简单的方法来切换AlertDialog的多选模式。

但是,您可以设置一个适配器,然后在包含的ListView本身中打开multichoice模式。

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

这会阻止你的对话在一次select后消失。

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

要获取select的项目,您需要相应地规划您的适配器。

看下面的代码它可以帮助你。 我在我的应用程序中使用这个。

 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> 

如果它是正确的话,就说得对。