使用 Kotlin 检查 CheckBoxPreference 时如何启动功能?

How can I launch a function when I check a CheckBoxPreference with Kotlin?

以下代码使用 androidx.preference.PreferenceFragmentCompat.

在 Preference UI 中显示 CheckBoxPreference 的 CheckBox 控件

希望在勾选CheckBox控件时可以启动一个名为myFunction()的函数 CheckBoxPreference,我该怎么办?

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
 
    <CheckBoxPreference
        app:key="checkBoxDisplayPinPrompt"
        app:title="@string/preferencePromptPin"
        app:summary="@string/preferencePromptPinSummary"
        app:defaultValue="false"
    />

</PreferenceScreen>



import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
import info.dodata.voicerecorder.R


class FragmentPreference : PreferenceFragmentCompat(){

    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        setPreferencesFromResource(R.xml.mypreference, rootKey)


    }

}

添加内容

致谢金:谢谢!

您的代码无效,代码 A 得到错误 A,代码 B 得到错误 B。

错误A

类型不匹配:推断类型是 CheckBoxPreference?但 CheckBoxPreference 是预期的

代码A

val checkBox = findPreference("checkBoxDisplayPinPrompt") as CheckBoxPreference
checkBox.setOnPreferenceChangeListener { preference, newValue ->
    if (newValue as Boolean) {
        //  function() your Fonction here
    }

    true
}

错误B

没有足够的信息来推断类型变量 T

代码B

 val checkBox = findPreference("checkBoxDisplayPinPrompt")!! as CheckBoxPreference
    checkBox.setOnPreferenceChangeListener { preference, newValue ->
        if (newValue as Boolean) {
            //  function() your Fonction here
        }

        true
    }

您可以通过 findPreference("Pref_Name") 获得您的偏好,您应该使用 setOnPreferenceChangeListener 来监听变化:

我正在使用 androidx.preference:preference-ktx:1.1.1'

package com.fi.Whosebug

import android.content.ContentValues
import android.content.ContentValues.TAG
import android.os.Bundle
import android.util.Log
import androidx.preference.CheckBoxPreference
import androidx.preference.PreferenceFragmentCompat

class FragmentPreference : PreferenceFragmentCompat() {

    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        setPreferencesFromResource(R.xml.preference_screen, rootKey)

        val checkBox = findPreference<CheckBoxPreference>("checkBoxDisplayPinPrompt")
        checkBox?.setOnPreferenceChangeListener { preference, newValue ->
            //  function() your Fonction here
            if (newValue as Boolean) {
                Log.e(ContentValues.TAG, "onPreferenceChange: $newValue")
            }
            true
        }
    }
}