Android从preferencess.xml获取密钥
我有一个PreferencesActivity
,显示带有复选框的preferences.xml
。Android从preferencess.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
。
有没有人有解决方案如何获得这项工作?
我使用
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(getBaseContext());
然后我可以通过prefs.get...()
,例如访问首prefs.getString(key)
。 你试过这个吗?
编辑:刚才检查 - prefs.getAll()
按预期工作,并返回所有喜好Map
。
您应该使用
SharedPreferences prefs = referenceManager.getDefaultSharedPreferences(this);
的偏好可能是空的,如果你从来没有通过PreferencesActivity设置。另外我认为你的ListActivity必须与PreferencesActivity在同一个包中。
您不需要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();
}
如果你需要,你应该建立类似的包装处理与诠释,布尔值等。
我也有这个问题。可悲的是,这是一款经典的RTFM。你应该把线下在MainActivity的onCreate()方法:
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
此信息可以在段落中找到“设置默认值”的http://developer.android.com/guide/topics/ui/settings.html
已经尝试过这一点。 – liquid 2011-03-10 09:18:27
问题是我想从Internet/Server更新这些首选项。所以我不知道每个复选框的关键。因此,首选项应显示在活动/视图中,用户可以选中/取消选中它们。我必须阅读选中的偏好设置,偏好应该由服务器更新......也许PreferenceActivity不是正确的解决方案?! : -/ – liquid 2011-03-10 09:27:39