坚持AlertDialog检查选项

时间:2014-10-21 08:25:44

标签: android arraylist sharedpreferences alertdialog

我已经挣扎了两个多星期了。关于共享偏好和其他黑客的所有SO问题。坚持多项选择alertdialog。但不幸的是,我仍然无法使其发挥作用。

有人可以向我解释如何让这件事有用吗?我的多选alertleialog工作。但我仍然无法保存所选项目..

我的代码:

    public class TimelineSettings extends DialogFragment {
    Context context;
    final ArrayList selected_categories = new ArrayList();
    final String[]items = {"Fourniture","Nourriture","Voyages","Habillement","Médias","Autres"};
    TinyDB tinydb = new TinyDB(context);
    private SharedPreferences sharedPreference;
    private SharedPreferences.Editor sharedPrefEditor;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        // Set the dialog title
        builder.setTitle("Choisissez vos paramètres")
                .setMultiChoiceItems(items, null,
                        new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int indexselected,
                                                boolean isChecked) {
                                if (isChecked) {
                                    // If the user checked the item, add it to the selected items
                                    selected_categories.add(indexselected);
                                } else if (selected_categories.contains(indexselected)) {
                                    // Else, if the item is already in the array, remove it
                                    selected_categories.remove(Integer.valueOf(indexselected));
                                }
                            }
                        })
                        // Set the action buttons
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                    tinydb.putList("selected",selected_categories);
                    }
                })
                .setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                    }
                });
        return builder.create();
    }
}

感谢您的帮助。

PS:我遇到了这个answer,如果你能向我解释如何做这项工作,那就太棒了。

1 个答案:

答案 0 :(得分:3)

请注意,因为您要将Integers保存在偏好设置中,然后将ArrayList Integers转换为ArrayList Strings。这可能会导致Exception。改为使用ArrayLists的{​​{1}}代替。

在您展示Strings之前,您只是错过了这一部分,您必须阅读已保存的选项并在DialogFragment中查看。

有最简单的方法可以做你想做的事,但让我们采取这种方法:

正如您所注意到的,DialogFragment方法会收到setMultiChoiceItems()作为String[]DialogFragment的项目,以定义是否选中它们。我们将使用这个数组来坚持我们的选择。此数组必须与items数组具有相同的长度,并且最初将设置为false。

首次启动boolean []时,不会检查任何项目。第二次,当您已经检查了项目时,您将从TinyDB中读取这些选项,并使用for语句填充布尔数组。然后将其提供给DialogFragment构建器。

保存的项目将在DialogFragment上显示为已选中,如您所愿。

以下是完整的已更改和正常运行的代码:

DialogFragment