0

我有一个 alertDialog 提示用户进行多项选择,我可以进行少量选择并将所选项目保存在 arrayList 中,但是当我再次触发该 alertBox 时,它会被重置并且所有复选框都未选中,我希望它们保留状态我将它们留在原处,直到我手动重置它们。这是如何运作的?我的代码:

ArrayList<String> participants = db.getNames();
            final String[] arr = participants.toArray(new String[participants
                    .size()]);
            boolean[] checkedItems = new boolean[participants.size()];
            final ArrayList<String> selectedParticipants = new ArrayList<String>();

            AlertDialog.Builder b = new AlertDialog.Builder(this);
            b.setTitle("Select the participants:");
            b.setMultiChoiceItems(arr, checkedItems,
                    new DialogInterface.OnMultiChoiceClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which,
                                boolean isChecked) {

                            if (isChecked) {

                                selectedParticipants.add(arr[which].toString());
                            }
                        }
                    });
            b.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    Toast.makeText(EnterExpense.this,
                            "" + selectedParticipants, Toast.LENGTH_SHORT)
                            .show();

                }
            }).setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub

                        }
                    });
4

1 回答 1

0

您上面的代码仅是正确的,但您错过的只有一件事是更新 boolean [] checkedItems数组列表中的检查项目。一旦用户选择了所有参与者,就会获得选定的参与者位置,并将所有这些位置的 true 添加到chekedItems列表中,剩余的项目一旦完成就将其设置为 false,它肯定会起作用!!。

您可以使用getCheckedItemIds()getCheckedItemPositions ()从列表视图中获取已检查项目的列表。您应该AlertDialog.getListView()首先使用获取对话框的列表视图。

b.getListView().getCheckedItemPositions ();
于 2012-09-04T11:29:59.680 回答