我有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
。
有人有解决方法如何使这项工作?
答案 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位于同一个包中。