我正在使用SharedPreferences
在我的应用程序中的所有Activities
中存储我的数据。我可以像这样访问它:
SharedPreferences mSharedPreferences = getSharedPreferences("MyPrefs", 0);
我已经实现了PreferenceActivity
,因此用户可以通过它更改值,但它发生的是读取/写入数据而不是“MyPrefs”,而是:
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
这对我来说有点意外。是否可以强制PreferenceActivity
处理我的“MyPrefs”偏好?在单个应用程序中有多个首选项有什么意义?谢谢。
答案 0 :(得分:14)
这是可能而且简单。这对我有用
public class SettingsActivity extends PreferenceActivity {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName("MyPrefs");
//getPreferenceManager().setSharedPreferencesMode(MODE_WORLD_WRITEABLE);
addPreferencesFromResource(R.xml.preferences);
}
}
答案 1 :(得分:5)
我建议在任何地方使用PreferenceManager.getDefaultSharedPreferences(context),这与首选项活动使用的内容相同。但是如果你需要坚持当前的设置,那么一个hacky解决方案(但我唯一知道的)是覆盖getSharedPreferences以返回你想要的。
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return super.getSharedPreferences("MyPrefs", mode);
}
答案 2 :(得分:0)
我可以像这样访问它
这没关系,只要你不打算使用PreferenceActivity
。
我已经实现了PreferenceActivity,因此用户可以通过它更改值
糟糕。
此外,除非您有特定原因使用getApplicationContext()
而不是活动/服务/其他内容,否则请删除Application
。只有在必要时才使用Application
对象,并且您知道为什么必须这样做。
是否可以强制PreferenceActivity处理我的“MyPrefs”首选项?
不容易。除非您有某些特定原因要发明自己的SharedPreferences
文件,否则我会使用默认文件。
在单个应用程序中有多个首选项有什么意义?
您可能有一个可重用的库或组件想要在SharedPreferences
中存储内容,并且可能有自己的文件,以免弄乱托管应用程序中的任何首选项。话虽如此,通常不需要多个首选项文件。