java - 更改首选项后执行代码

标签 java android sharedpreferences android-preferences

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

我正在编写一个从互联网获取一些文本的应用程序。它可以用多种语言来实现这一点,用户可以使用Preference来选择他想要查看的语言。当数据更改时,我需要使用新语言再次获取文本。

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

首选项更改后,我可以使用不同的监听器来执行代码吗?或者我应该添加代码以在监听器中手动将更改提交到 SharedPreferences

最佳答案

重写registerOnSharedPreferenceChangeListener()中的onSharedPreferenceChanged()方法并调用其中的静态方法。保存首选项后会调用它。

这样使用:

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

关于java - 更改首选项后执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29476741/

相关文章:

java - 在另一个干净项目中使用时,自定义 Maven 插件无法解析父 POM

android - 如何在 Android 模拟器上运行 Xamarin UI 测试

android 使用自定义适配器更改 ListView 中的列表项

checkbox - flutter 中共享首选项和复选框的问题

java - 如何解决 "java.lang.UnsatisfiedLinkError: Can' t find dependent libraries"without System32?

java - 使用 Curl/HttpClient 重定向 : header "Location" missing

java - 为什么要使用空的抽象类而不是接口(interface)?

android - 我可以分享到我的 NativeScript 应用程序吗?

android - 如何存储/保存 HashMap<String, List<String>>

android - sharedPreferences 不会在 Activity 之间共享