来自多个文件的SharedPreferences

时间:2011-01-22 21:40:00

标签: android sharedpreferences

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

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

  2. 如果我使用addPreferencesFromResource()并传递资源文件ID,它会读取值,但我无法使用此方法,因为我的Activity必须是PreferenceActivity的子类,我是不想做。

  3. 如何从多个首选项文件中读取值?必须在getSharedPreferences()中作为第一个参数传递什么(带扩展名的文件名,没有扩展名的文件名等)?

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

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

1 个答案:

答案 0 :(得分: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()将不会为您做任何事情。