Android从preferences.xml获取密钥

时间:2011-03-09 13:52:18

标签: java android preferences

我有PreferencesActivity,其中显示preferences.xml复选框。

preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Keywords">
    <CheckBoxPreference android:key="Essen" 
                        android:title="Essen" 
                        android:selectable="true" 
                        android:enabled="true"
                        android:persistent="false">
    </CheckBoxPreference>
    <CheckBoxPreference android:key="Kleidung" 
                        android:title="Kleidung" 
                        android:selectable="true" 
                        android:enabled="true"
                        android:persistent="false">
    </CheckBoxPreference>
</PreferenceCategory>
</PreferenceScreen>

PreferencesActivity:

public class PreferencesViewController extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

现在在另一个ListActivity我希望从选中的复选框中显示所有键/标题。

我尝试使用

访问首选项
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

SharedPreferences prefs = getSharedPreferences("mypackage_preferences", 0);

但两者都不起作用。

当我致电prefs.getAll().size()时,结果为0。

我可以使用getPreferenceScreen().getPreference(i).…访问密钥/标题,但不能使用其他Activity,而只能使用PreferenceActivity

有人有解决方法如何使这项工作?

4 个答案:

答案 0 :(得分:3)

您无需PreferenceActivity即可完成此操作。

要访问PreferenceActivity中使用的首选项,您应该使用

SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(getBaseContext());

如果您的数据列表来自服务器,那么您可以使用ListActivity / ExpandableListActivity /任何自定义活动来对其进行可视化,但这样您就需要编写更改首选项的处理程序。

执行此操作的常用方法是:

private void saveStringPreference(final String key, final String value)
{
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

如果需要,您应该创建类似的包装器来处理int,boolean等值。

答案 1 :(得分:1)

我也有这个问题。遗憾的是,这是一款经典的RTFM。您应该将下面的行放在MainActivity的onCreate()方法中:

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

此信息可在http://developer.android.com/guide/topics/ui/settings.html

的“设置默认值”段落中找到

答案 2 :(得分:0)

我用

SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(getBaseContext());

然后我可以通过prefs.get...()访问偏好设置,例如prefs.getString(key)。 你试过这个吗?

修改:已选中 - prefs.getAll()按预期工作,并返回包含所有偏好设置的Map

答案 3 :(得分:0)

你应该使用

SharedPreferences prefs = referenceManager.getDefaultSharedPreferences(this);

如果您从未通过PreferencesActivity设置首选项,则首选项可能为空。另外,我认为您的ListActivity必须与PreferencesActivity位于同一个包中。