Kotlin-如何在自定义AlertDialog中保存复选框的状态?

时间:2019-12-13 09:09:49

标签: android kotlin checkbox sharedpreferences state

我正在尝试保持选中复选框状态,是否还有选中的复选框。

我有以下对话框:

fun showMultipleChoiceDialog(options: Array<String>?, listener: DialogInterface.OnMultiChoiceClickListener) {
        if (options != null && options.isNotEmpty()) {
            val dialog = AlertDialog.Builder(SharedInstance.instance.context)
            .setMultiChoiceItems(options, null, listener)
            .setPositiveButton("Ok", DialogInterface.OnClickListener { dialog, which -> dialog.dismiss() })
            .create()
            dialog.show()
        }
    }

我已经有以下代码:

days_picker.setOnClickListener {
            val allDays = ArrayList(days.values)
            val allStringDays = arrayOf("Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag")
            var checkedItems: MutableList<String> = mutableListOf()
            SearchProfileDialogHelper.selectedDays.clear()
            searchProfile.days.clear()

            DialogHelper.showMultipleChoiceDialog(allStringDays, DialogInterface.OnMultiChoiceClickListener { _, which, isChecked ->
                if(isChecked){
                    SearchProfileDialogHelper.selectedDays.add(allDays[which])
                    checkedItems.add(allDays[which])
                }
                if(!isChecked){
                    SearchProfileDialogHelper.selectedDays.remove(allDays[which])
                    checkedItems.remove(allDays[which])
                    if(checkedItems.size == 0) {
                        days_text.setText("Stel in voor welke dagen u beschikbaar bent.")
                    }
                }
}

现在,当我选择复选框时,它可以正常工作。如果我取消选中一个选中的复选框,它也可以正常工作。但是,我仍然希望在项目中包含的内容是能够在不进行任何选择的情况下按下OK按钮,并且如果在此之前进行了选择,则保留默认文本。 (否则,它已经显示了默认文本),最重要的是,我想保存选中复选框的状态,直到用户再次更改它为止。因此,每当我重新打开对话框时,我都想查看用户上次检查的内容。

我的问题是我似乎无法找出如何调用复选框并将其设置为特定状态的方法。我已经将选中的项目保存在列表中,所以这里不是问题。 辅助函数showMultipleChoiceDialog来自我的一位同事,因此为什么我在理解如何让状态在任何人更改之前保持不变之前遇到麻烦。

所以我希望有人能帮助我!

我已经检查了以下主题:

已经有几个youtube视频,但是其中大多数都可以与findViewById之类的东西一起使用,并且在我制作片段时正在活动中。

1 个答案:

答案 0 :(得分:0)

PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("Checkbox" + checkbox_number, checked).apply();

checkbox_number 仅是CheckBoxes(0、1、2、3 ...)的计数器 然后,您只需读取以下检查值:

ArrayList<Boolean> checkedList = new ArrayList<>();
for (int i = 0; i < check_box_count; i++) {
     checkedList.add(PreferenceManager.getDefaultSharedPreferences(this).getInt("CheckBox" + i, false);
}

我不确定这是否是您要问的问题,但是每次需要保存CheckBoxes的状态时,我都会使用这种方法。如果我一次处理多个CheckBoxes,则使用它们的Id代替计数器,因此我不必担心如何一次处理多个时间(例如,ViewPager不同页面上的多项选择)

很抱歉,它用的是Java,但我更喜欢用我的语言说。但是我是Kotlin的新手。