【问题标题】:How to force PreferenceActivity to deal with my SharedPreferences?如何强制 PreferenceActivity 处理我的 SharedPreferences?
【发布时间】:2011-12-04 02:15:31
【问题描述】:

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

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

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

PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

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

【问题讨论】:

标签: android sharedpreferences


【解决方案1】:

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

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,此技术也适用
【解决方案2】:

我建议在任何地方都使用 PreferenceManager.getDefaultSharedPreferences(context),这与偏好活动使用的相同。但是,如果您需要坚持当前的设置,那么一个 hacky 解决方案(但我知道的唯一一个)是覆盖 getSharedPreferences 以返回您想要的。

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

【讨论】:

    【解决方案3】:

    我可以像这样访问它

    没关系,只要您不打算使用PreferenceActivity

    我已经实现了 PreferenceActivity,因此用户可以通过它更改值

    哎呀。

    此外,请在此处删除 getApplicationContext(),除非您有特定原因使用 Application 而不是活动/服务/其他。仅在必要时使用 Application 对象,并且您知道为什么必须这样做。

    是否可以强制 PreferenceActivity 处理我的“MyPrefs”首选项?

    不容易。除非您有特定的理由来创建自己的 SharedPreferences 文件,否则我会使用默认文件。

    在单个应用程序中拥有多个首选项有什么意义?

    您可能有一个可重用的库或组件想要将内容存储在 SharedPreferences 中,并且可能有自己的文件,以免破坏托管应用程序的任何首选项。话虽如此,通常不需要多个首选项文件。

    【讨论】:

    • PreferenceActivitygetPreferenceManager().setSharedPreferencesName() 可以解决问题
    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2011-09-16
    • 2012-12-12
    相关资源
    最近更新 更多