如何从AlertDialog获取setMultiChoiceItems项?

时间:2010-11-12 08:21:42

标签: android

我正在使用apidemos中的以下代码..

        return new AlertDialog.Builder(AlertDialogSamples.this)
            .setIcon(R.drawable.ic_popup_reminder)
            .setTitle(R.string.alert_dialog_multi_choice)
            .setMultiChoiceItems(R.array.select_dialog_items3,
                    new boolean[]{false, true, false, true, false, false, false},
                    new DialogInterface.OnMultiChoiceClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton,
                                boolean isChecked) {

                            /* User clicked on a check box do some stuff */
                        }
                    })
            .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked Yes so do some stuff */
                }
            })
            .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked No so do some stuff */
                }
            })
           .create();

/* User clicked Yes so do some stuff */下,我没有输入isChecked变量..但是,我在/* User clicked on a check box do some stuff */部分给出了isChecked ..显然我不想在复选框点击时更新我的​​SharedPrefs,如果用户点击取消..

那么如何获取setPositiveButton onClick?

上的复选框和值

感谢。

3 个答案:

答案 0 :(得分:5)

使用AlertDialog类的getListView()。并获取listView。 即当你最后调用.create()时,这将获取一个新的AlertDialog。

然后使用以下方法之一:

 1. getCheckItemPositions:SparseBooleanArray
 2. getCheckedItemIds:long[]

我可以为您提供演示代码。给我10-15分钟。

答案 1 :(得分:3)

byte[]中传递对setMultiChoiceItems()的引用。

    final boolean[] booleans = {false, true, false, true, false, false, false};

然后检查booleans内的setPositiveButton()的值。

如果您需要传递此AlertDialog,请展开AlertDialog并创建一个字段boolean,如1所述。

答案 2 :(得分:0)

要在AlertDialog.Builder中使用setMultiChoiceItems时获取已检查项目, 你必须创建DialogInterface.OnMultiChoiceClickListener,甚至是空的onClick。 只有在这种情况下,在第二个参数中的checkedItem将在AlertController内部使用和更新,并在退出时反映检查的项目(即在setPositiveButton回调中)

检查此AlertController代码:

...    
} else if (mOnCheckboxClickListener != null) {
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView parent, View v, int position, long id) {
                if (mCheckedItems != null) {
                    mCheckedItems[position] = listView.isItemChecked(position);
                }
                mOnCheckboxClickListener.onClick(
                        dialog.mDialogInterface, position, listView.isItemChecked(position));
            }
        });
    }
...