【问题标题】:Executing code after a preference has been changed更改首选项后执行代码
【发布时间】:2015-04-06 17:58:54
【问题描述】:

我知道如果我想在SharedPreferences 中更改首选项之前执行一些代码,我可以获得Preference.OnPreferenceChangeListener

我正在编写一个从 Internet 获取一些文本的应用程序。它可以用多种语言做到这一点,并且用户使用Preference 选择他想看到的语言。当数据发生变化时,我需要使用新语言再次获取文本。

为了获取此文本,我使用了一种不将语言作为参数的静态方法(它使用SharedPreferences 自行获取)。这意味着从OnPreferenceChangeListener 调用此方法对我没有帮助,因为此时尚未保存首选项。

我可以使用不同的侦听器来执行代码首选项已更改?还是我应该在侦听器中手动添加代码以将更改提交到SharedPreferences

【问题讨论】:

  • 当用户更改语言时更改SharedPreferences,然后调用您的静态方法。现在你什么时候必须这样做,取决于你如何获取用户的操作。
  • “用户使用偏好选择他想看到的语言”是什么意思?
  • 您可以在registerOnSharedPreferenceChangeListener() 中覆盖onSharedPreferenceChanged()。参考这个stackoverflow.com/a/13563870/3498044
  • 但是,@Ryan 指出的解决方案(onSharedPreferenceChanged() 在 SharedPreference 对象上)与您在问题中谈论的偏好侦听器不同,并且其中包含有希望的过去时。你检查了吗?
  • @miav 感谢您让我注意到这一点,我认为这是我已经研究过的事情。也许我们可以清理这些 cmets,它们对其他人没有用处。

标签: java android sharedpreferences android-preferences


【解决方案1】:

覆盖registerOnSharedPreferenceChangeListener() 中的onSharedPreferenceChanged() 方法并在那里调用静态方法。在保存首选项后调用它。

这样使用:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedPreferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
      @Override
      public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            // Do your stuff
      }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 2012-02-04
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 2013-09-02
    • 2017-04-11
    相关资源
    最近更新 更多