如何让PreferenceActivity使用自定义的偏好设置文件

22

在没有了解PreferenceActivity的情况下,我第一次尝试偏好设置。因此,现在我有一个将所有用户偏好存储在特定偏好文件中的应用程序。

我想迁移到使用PreferenceActivity,但我也希望我的用户保留他们的偏好设置。

有没有办法告诉我的PreferenceActivity在所有偏好设置中使用特定的文件?


你可以编写一个方法,读取旧的偏好设置并将其保存为常规偏好设置。 - Maaalte
我考虑过迁移作为一种解决方案。但是那样的话,我永远无法摆脱迁移代码?没有办法确保我的应用程序中没有旧版本存在。 - Yashima
3个回答

68

可能已经晚了,但你可以在这里找到一个不错的解决方案:

你可以事先设置默认共享偏好文件的名称,像这样:

public class MyPreferencesActivity extends PreferenceActivity {
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         PreferenceManager prefMgr = getPreferenceManager();
         prefMgr.setSharedPreferencesName("my_preferences");
         prefMgr.setSharedPreferencesMode(MODE_WORLD_READABLE);

         addPreferencesFromResource(R.xml.preferences);
    }
}

希望这能对某些人有所帮助。

谢谢。


4
不错的答案(尽管已被弃用……)由于链接失效经过了编辑,并从链接中复制了代码。虽然我的个人看法是使用“MODE_WORLD_READABLE”是一个错误。 - Richard Le Mesurier

1
你可以在应用程序开始时读取所有的偏好设置,然后使用Preferences将它们存储起来。
Editor e = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit();
e.putBoolean("yourPreference", true);
e.putString("yourOtherPreference", "This is the Value");
...
e.commit();

希望能对您有所帮助。


我现在实现了这个变体,尽管一开始我更喜欢 Andrew 的文件重命名想法。然而,我从未弄清楚如何做后者,所以我坚持选择了显而易见的方法。谢谢! - Yashima

0

Maaalte是正确的,您想要做的是在onCreate中测试自定义文件是否存在,如果存在,则将其重命名为标准共享首选项文件名。

另一个选择是逐个读取旧首选项,并使用共享首选项API在读取它们时添加它们,然后在完成时删除旧首选项。


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