如何强制让PreferenceActivity处理我的SharedPreferences?

8

我正在使用SharedPreferences在我的应用程序中存储数据,以便在所有Activities之间共享。我可以通过以下方式访问它:

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

我已经实现了PreferenceActivity,以便用户可以通过它更改值,但事实上它并没有读取/写入数据到"MyPrefs",而是:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

这让我有点意外。是否可以强制PreferenceActivity处理我的"MyPrefs"偏好设置?而且,在单个应用程序中拥有多个偏好设置的意义是什么?谢谢。

1
请阅读此链接:https://dev59.com/kVrUa4cB1Zd3GeqPhjes - aromero
3个回答

15

这是可能且简单的。对我有用。

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);
    }
}

这是正确答案。如果你使用PreferenceFragment,这种技术也同样适用。 - Dave Jensen

5

我建议您在各处都使用PreferenceManager.getDefaultSharedPreferences(context),它与首选项活动所使用的相同。但是,如果您需要坚持使用当前设置,则可以实现一个巧妙的解决方案(但这是我所知道的唯一方法),即重写getSharedPreferences函数并返回您想要的内容。

@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
    return super.getSharedPreferences("MyPrefs", mode);
}

0
我这样获取它的访问权
只要您不打算使用PreferenceActivity,那就没问题。
我已经实现了PreferenceActivity,以便用户可以通过它更改值。
哎呀。
此外,请除去getApplicationContext(),除非您有特定原因使用Application而不是activity/service/whatever。只有在必须使用并且知道为什么必须使用Application对象时才使用它。
强制PreferenceActivity处理"MyPrefs"首选项可能吗?
不容易。除非您有某些特定原因发明自己的SharedPreferences文件,否则我会使用默认文件。
单个应用程序中有几个首选项的意义是什么?
您可能有一个可重用的库或组件想要在SharedPreferences中存储东西,并且该库可能具有自己的文件,以避免破坏托管应用程序的任何首选项。话虽如此,通常不需要多个首选项文件。

11
“PreferenceActivity”的getPreferenceManager().setSharedPreferencesName()可以完成此操作。 - xverges

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接