kotlin 关闭应用程序后保留复选框状态

iklwldmw  于 2023-03-13  发布在  Kotlin
关注(0)|答案(1)|浏览(134)

我有多个复选框的应用程序,它会在选中所有三个复选框后被禁用。问题是,当我关闭应用程序时,状态不存在。我的代码:

private fun setCheckedChangedListener() {
        listOf(binding.checkTaskOne,binding.checkTaskTwo,binding.checkTaskThree).forEach {
            it.setOnCheckedChangeListener{ _ , _ ->
                if(binding.checkTaskOne.isChecked && binding.checkTaskTwo.isChecked && binding.checkTaskThree.isChecked) {
                    binding.checkTaskOne.isEnabled = false
                    binding.checkTaskTwo.isEnabled = false
                    binding.checkTaskThree.isEnabled = false
                    binding.textView2.setText(R.string.splneno)

                }
            }
        }
    }

我试着用onDestroy函数和Prefrences进行实验,但我不知道它是如何工作的。

override fun onDestroy() {
        super.onDestroy()
        save(binding.checkTaskOne.isChecked())
        save(binding.checkTaskTwo.isChecked())
    }

    override fun onResume() {
        super.onResume()

    }

    private fun save(boolean: Boolean) {
        val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
        with (sharedPref.edit()) {
            putBoolean("check", true)
            apply()
        }
    }
wlzqhblo

wlzqhblo1#

有几件事要做。最重要的是,你根本不加载保存的首选项。而且,你每次都用同一个名字保存首选项--这是行不通的,每个设置都必须有单独的名字,以便运行时区分它们。
我修改了保存的方法,添加了一个加载的方法。我在onCreate()方法中调用它,该方法在开始时被调用。
顺便说一下,还有一些事情需要改进,比如避免重复获取共享首选项处理程序和将每个首选项的名称移动到常量部分,以避免在加载和保存方法使用中键入它们时出错。
代码:

override fun onCreate(savedInstanceState: Bundle?) {
        [...] //things like initialize binding, etc.

        binding.checkTaskOne.isChecked = load("checkTaskOne")
        binding.checkTaskTwo.isChecked = load("checkTaskTwo")
        binding.checkTaskThree.isChecked = load("checkTaskThree")

    }

override fun onDestroy() {
        super.onDestroy()
        save("checkTaskOne", binding.checkTaskOne.isChecked())
        save("checkTaskTwo", binding.checkTaskTwo.isChecked())
        save("checkTaskThree", binding.checkTaskThree.isChecked())
    }

private fun load(name: String): Boolean {
        val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return false
        return sharedPref.getBoolean(name, false)
    }

    private fun save(name: String, boolean: Boolean) {
        val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
        with(sharedPref.edit()) {
            putBoolean(name, boolean)
            apply()
        }
    }

相关问题