Java 如何从Alert.Builder中的多选项中获取选中项?

Java 如何从Alert.Builder中的多选项中获取选中项?,java,android,android-alertdialog,Java,Android,Android Alertdialog,有没有办法在下一个Alert.Builder中获取有关选中项目的信息?我需要在SharedReferences中保存一些布尔值,当有人单击肯定按钮时。这些布尔值来自用户在警报中所做的选择。我怎样才能得到它们 AlertDialog.Builder builder = new AlertDialog.Builder(this); final SharedPreferences preferences = getSharedPreferences("type_sett

有没有办法在下一个Alert.Builder中获取有关选中项目的信息?我需要在SharedReferences中保存一些布尔值,当有人单击肯定按钮时。这些布尔值来自用户在警报中所做的选择。我怎样才能得到它们

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final SharedPreferences preferences = getSharedPreferences("type_settings", MODE_PRIVATE);

        boolean[] selectedTypes = getSelectedTypes(preferences);

        builder.setIcon(R.drawable.menu_type)
                .setTitle(R.string.list_dialog_title)
                .setMultiChoiceItems(R.array.select_type_items, selectedTypes,
                        new DialogInterface.OnMultiChoiceClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
                            }
                        })
                .setPositiveButton(R.string.types_save, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        SharedPreferences.Editor prefEditor = preferences.edit();
                    }
                })
                .setNegativeButton(R.string.types_cancel, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        dialog.cancel();
                    }
                })
                .create();
        builder.show();

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

mAlert.getListView().getCheckedItemPositions ();

我设法以某种方式解决了这个问题,但我不知道这是否是一个好的做法。代码如下:

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        final SharedPreferences preferences = getSharedPreferences("type_settings", MODE_PRIVATE);

        final String[] availableTypes = getResources().getStringArray(R.array.select_type_items);
        final boolean[] selectedTypes = getSelectedTypes(preferences, availableTypes);

        builder.setIcon(R.drawable.menu_type)
                .setTitle(R.string.list_dialog_title)
                .setMultiChoiceItems(R.array.select_type_items, selectedTypes,
                        new DialogInterface.OnMultiChoiceClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
                                selectedTypes[whichButton] = isChecked;
                            }
                        })
                .setPositiveButton(R.string.types_save, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        SharedPreferences.Editor prefEditor = preferences.edit();
                        saveSelectedTypes(prefEditor, availableTypes, selectedTypes);
                    }
                })
                .setNegativeButton(R.string.types_cancel, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        dialog.cancel();
                    }
                })
                .create();
        builder.show();

为了提高存储效率,可以先将布尔数组转换为整数,然后再将其存储为首选项。但是请注意,初始化AlertDialog列表的布尔数组的顺序与AlertDialog中的布尔数组结果的顺序相反。(这似乎是一个一致的逆转:发生在OS 2.3.6和4.2.2上……我没有检查任何其他版本。)

好的解决方案。但只将所选项目保存到prefs是正确的方法。您正在存储所有项目,甚至是未选中的项目。好的,如果它适合你的需要。我想我也需要未经检查的,但无论如何,我的数组不是很大,只有15个元素。你能包括saveSelectedTypes的代码吗?我想在SharedReferences中保存selecteditem的值