偏好更改侦听器但在内部状态更改后 android
Preference change listener but AFTER the internal state has changed android
我有一个 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
在内部状态改变之前被调用 ,这意味着我不读取新值,而是读取旧值。
是否有在内部值更改后调用的回调?
有 OnPreferenceChangeInternalListener.onPreferenceChange
当此首选项更改时调用,但此回调仅供内部使用。
所以是的,内部值更改后不会调用其他回调。
OnPreferenceChangeListener.onPreferenceChange
是您唯一可以使用的。
你可以做一件事,如果你不想直接从回调中调用函数,从中获取新值,那么你可以手动将新值保存在 SharedPref 中,然后调用可以使用你的函数的函数从 sharedpref 读取值并进一步处理的逻辑。
添加到 dinkar_kumar 的答案中,您可以尝试实施 OnSharedPreferenceChangeListener
,我认为您可以使用 onSharedPreferenceChanged
进一步使用您的逻辑。
谢谢,见多识广!我会按照你建议的方式去做。看起来不错
我有一个 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
在内部状态改变之前被调用 ,这意味着我不读取新值,而是读取旧值。
是否有在内部值更改后调用的回调?
有 OnPreferenceChangeInternalListener.onPreferenceChange
当此首选项更改时调用,但此回调仅供内部使用。
所以是的,内部值更改后不会调用其他回调。
OnPreferenceChangeListener.onPreferenceChange
是您唯一可以使用的。
你可以做一件事,如果你不想直接从回调中调用函数,从中获取新值,那么你可以手动将新值保存在 SharedPref 中,然后调用可以使用你的函数的函数从 sharedpref 读取值并进一步处理的逻辑。
添加到 dinkar_kumar 的答案中,您可以尝试实施 OnSharedPreferenceChangeListener
,我认为您可以使用 onSharedPreferenceChanged
进一步使用您的逻辑。
谢谢,见多识广!我会按照你建议的方式去做。看起来不错