我知道如果我想在 SharedPreferences
中更改首选项之前执行某些代码,我可以获得Preference.OnPreferenceChangeListener
。
我正在编写一个从互联网上获取一些文本的应用程序。它可以在多种语言中执行此操作,并且用户使用Preference
选择他想要查看的语言。当数据发生变化时,我需要使用新语言再次获取文本。
要获取此文本,我使用静态方法,该方法不将语言作为参数(它使用SharedPreferences
获取)。这意味着从OnPreferenceChangeListener
调用此方法对我没有帮助,因为此时偏好尚未保存。
在更改首选项后,是否可以使用不同的侦听器来执行代码?或者我应该只是添加代码来自己在监听器中手动将更改提交给SharedPreferences
?
答案 0 :(得分:1)
覆盖onSharedPreferenceChanged()
中的registerOnSharedPreferenceChangeListener()
方法并在那里调用静态方法。保存首选项后会调用它。
以这种方式使用:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedPreferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// Do your stuff
}
});