java - 如何在多个 fragment 文件中使用共享首选项

标签 java android fragment preferences shared

我需要在多个fragment 文件中使用共享首选项(无法使用 Activity 文件)我必须存储多个字符串行。

如何初始化 fragment 中的共享首选项?我如何写入/读取它?

我需要在主 Activity 中初始化它还是必须在 fragment Activity 文件中初始化它?

技巧如下:

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE); 

...不起作用。

最佳答案

尝试将您的 SharedPreferences 封装在一些首选项类中,类似于:

class MyPrefs {

    private static final String FILENAME = "prefs_filename";
    private static final String KEY_SOMETHING = "something";

    private SharedPreferences mPreferences;

    public MyPrefs(Context context) {
        mPreferences = new SharedPreferences(FILENAME, Context.MODE_PRIVATE);
    }

    public void setSomething(Something value) {
       mPreferences.edit().put...(KEY_SOMETHING, value).commit();
    }

    public Something getSomething() {
       return mPreferences.getSomething(key, defaultValue);
    }
}

通过这种方式,我们为非 volatile 数据存储提供了干净的 API。 SharedPreferences 级别太低,暴露了太多细节,例如存储文件名,它迫使我们记住所有键和值类型以提取任何数据。它可能在简单的情况下工作,但一旦存储的数据变得复杂,就会产生大量问题。尝试存储诸如具有很少字段或简单复杂数字的用户配置文件之类的内容,您就会明白了。使用原始的 SharedPreferences 会让你的重构变得非常痛苦。即使是简单的数据格式升级(如架构更新),使用裸 SharedPreferences 也很快变得不可能。

关于java - 如何在多个 fragment 文件中使用共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27091471/

相关文章:

java - 谷歌应用程序引擎在第一次坚持后默默地坚持失败

java - 使用 Java 和 JSP 连接到 Web 数据库

java - 我的问题是关于 find(Node root ,int level) 方法。这是关于在给定二叉树中查找最深节点的代码

android - 在 searchView 中设置查询

android - 构建失败的未知属性 'packagingOptions'

java - 第一个 Imageviews 和原始重复和变化太快

java - 应用程序崩溃并出现 java.lang.SecurityException : Permission Denial

java - 您可以限制特定的 Android API 版本从 googlePlay 商店运行/下载应用程序吗?

android - 全屏 fragment

android - ActionBar 中的 SearchView 显示图标两次但未获得自动对焦。这是为什么?