1

我有 2 个文件SharedPreferences(一个显示在 aPreferenceActivity中,第二个存储不能在 中看到的值PreferenceActivity)。问题 - 我想在启动时从两个文件中加载这些值。

  1. 我尝试getSharedPreferences()并通过了文件名。奇怪的是,我无法读取实际值——它总是返回默认值。

  2. 如果我正在使用addPreferencesFromResource()并传递资源文件 ID,它会读取值,但我不能使用这种方法,因为我的Activitymust subclass PreferenceActivity,我不想这样做。

如何从多个首选项文件中读取值?什么必须getSharedPreferences()作为第一个参数传入(带扩展名的文件名、不带扩展名的文件名等)?

有一个方法PreferenceManager.getDefaultSharedPreferences()。当我有超过 1 个文件时,什么是“默认”?

这么简单的任务,浪费了这么多时间……

4

1 回答 1

2

简短的回答:听起来您PreferenceManager.getGlobalPreferences在某些时候调用会加载默认首选项文件而不是您的“命名”首选项。如果你混合它,context.getSharedPreferences("PREFS_NAME", Context.MODE_WORLD_READABLE)你会得到奇怪的行为。

长答案:您必须指定每次打开时要读取的首选项文件的名称:

SharedPreferences prefs = context.getSharedPreferences("PREFS_NAME", Context.MODE_WORLD_READABLE)

这将强制应用程序使用文件名“PREFS_NAME.xml”创建一个新的首选项文件,如果它尚不存在并开始使用它。

addPreferencesFromFile() 是一个不同的函数,仅用于填充 PreferenceActivity。如果您不想使用 PreferenceActivity 那么它对您毫无用处。

如果您决定为您的设置使用首选项活动,请使用上述内容,然后使用以下设置此首选项活动实例的首选项

getPreferenceManager().setSharedPreferencesName("PREF_NAME);

然后调用addPreferencesFromResource()。如果您没有使用 PreferenceActivity,那么 addPreferencesFromResource() 将不会为您做任何事情。

于 2011-02-17T09:03:24.210 回答