2011-01-22 52 views
1

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

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

  2. 如果我使用addPreferencesFromResource()并通过资源文件的ID读值,但我不能使用这种方法,因为我Activity必须继承PreferenceActivity,这是我不想做的事。

如何从多个首选项文件读取值?作为第一个参数,必须在getSharedPreferences()中传递什么(带有扩展名的文件名,没有扩展名的文件名等)?有一种方法PreferenceManager.getDefaultSharedPreferences()。当我有超过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()将不会为你做任何事情。