使用 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
}
}
}
以下代码使用 androidx.preference.PreferenceFragmentCompat
.
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
}
}
}