我有SharedPreferences
的2个文件(一个显示在PreferenceActivity
中,第二个存储的值不能在PreferenceActivity
中看到)。问题 - 我想在启动时从这两个文件加载这些值。
我尝试了getSharedPreferences()
并传递了文件名。奇怪的是,我无法读取实际值 - 它总是返回默认值。
如果我使用addPreferencesFromResource()
并传递资源文件ID,它会读取值,但我无法使用此方法,因为我的Activity
必须是PreferenceActivity
的子类,我是不想做。
如何从多个首选项文件中读取值?必须在getSharedPreferences()
中作为第一个参数传递什么(带扩展名的文件名,没有扩展名的文件名等)?
有一种方法PreferenceManager.getDefaultSharedPreferences()
。当我有多个文件时,什么是“默认”?
这么简单的任务,浪费了太多时间......
答案 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()将不会为您做任何事情。