如何强制PreferenceActivity处理我的SharedPreferences?

时间:2011-10-09 19:29:24

标签: android sharedpreferences

我正在使用SharedPreferences在我的应用程序中的所有Activities中存储我的数据。我可以像这样访问它:

SharedPreferences mSharedPreferences = getSharedPreferences("MyPrefs", 0);

我已经实现了PreferenceActivity,因此用户可以通过它更改值,但它发生的是读取/写入数据而不是“MyPrefs”,而是:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

这对我来说有点意外。是否可以强制PreferenceActivity处理我的“MyPrefs”偏好?在单个应用程序中有多个首选项有什么意义?谢谢。

3 个答案:

答案 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中存储内容,并且可能有自己的文件,以免弄乱托管应用程序中的任何首选项。话虽如此,通常不需要多个首选项文件。