【发布时间】:2021-07-31 00:15:59
【问题描述】:
我有一个 SettingsFragment,它扩展了 PreferenceFragmentCompat 和 preference.xml
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = super.onCreateView(inflater, container, savedInstanceState)
preferenceManager.findPreference<Preference>(USER_CLOUD_PROXY)?.let {
it.setOnPreferenceChangeListener { _, _ ->
// mainViewModel.resetConnection()
true
}
}
return view
}
}
和xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="User settings">
<SwitchPreference
android:defaultValue="true"
android:enabled="true"
android:key="user_cloud_proxy"
android:title="Use cloud proxy" />
</PreferenceCategory>
</PreferenceScreen>
切换按钮指示我的应用程序必须使用哪个 URL 连接到 webSocket 服务器。因此,当用户更改开关状态时,我想通过函数重置连接。稍后在函数中,我读取了 sharedPreference 值以选择 URL。
然而,it.setOnPreferenceChangeListener 被调用在内部状态改变之前,这意味着我读的不是newValue,而是旧的。
是否有在内部值更改后调用的回调?
【问题讨论】:
-
那不回答问题...
-
我没有说它的答案我只是想确认你使用这个只是正确的?
-
因为根据文档你应该得到 newValue
-
我可以在回调中获取 newValue,但我想在之后从 sharedPreferences 中读取它,而不是通过将其作为参数传递。但是,我没有找到任何解决方案,所以我像参数一样传递它:P
标签: android kotlin sharedpreferences preferencefragmentcompat