好的,这里是我结束与库蒂斯的帮助。
基本上在我的代码开始首选项活动我没有任何行动的所有喜好和行动,如果你只想要他们中的一些。该动作需要匹配某种偏好或偏好集合上的键。
// all preferences
Intent launchPreferencesIntent = new Intent().setClass(this,
PreferencesFromXml.class);
startActivity(launchPreferencesIntent);
// just key_trip_plot_control_preferences
Intent launchPreferencesIntent = new Intent(
getString(R.string.key_trip_plot_control_preferences))
.setClass(this, PreferencesFromXml.class);
startActivity(launchPreferencesIntent);
在我PreferencesFromXml类,我总是从XML添加偏好,但这时如果我有一个动作我搜索虽然喜好寻找匹配的密钥。如果我找到一个我removeAll首选项,然后添加匹配的或它的孩子,如果它是一个PreferenceGroupe回来。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
String act = getIntent().getAction();
if (act != null) {
Preference res = findPreferenceByKey(getPreferenceScreen(), act);
if (res != null) {
getPreferenceScreen().removeAll();
if (res instanceof PreferenceGroup) {
PreferenceGroup groupe = (PreferenceGroup) res;
// add sub items
for (int i = 0; i < groupe.getPreferenceCount(); i++) {
Preference pref = groupe.getPreference(i);
if (pref != null) {
getPreferenceScreen().addPreference(pref);
}
}
} else { // just add the item.
getPreferenceScreen().addPreference(res);
}
}
}
}
protected Preference findPreferenceByKey(PreferenceGroup in, String key) {
for (int i = 0; i < in.getPreferenceCount(); i++) {
Preference pref = in.getPreference(i);
if (pref == null) {
// should not happen
Log.v(TAG, "findPreferenceByKey null pref i:" + i);
return null;
} else if (pref.hasKey() && pref.getKey().equals(key)) {
return pref;
} else if (pref instanceof PreferenceGroup) {
// recurse
Preference res = findPreferenceByKey((PreferenceGroup) pref,
key);
if (res != null) {
return res;
}
}
}
return null;
}
好吧,它是有保证,这是可能的。您还让我在我没有看过的文档中找到一个新的API,因为它是API级别11,我正在过滤它。不幸的是,关于addPreferencesFromIntent()的段落就像泥土一样清晰。一些更多的人发现一些人试图做我想做的事,但没有明确的例子。我的curent尝试在preferencemanager.inflateFromIntent中给出了一个空指针异常,所以我的Intent可能不好。 – Ifor
好吧,因此addPreferencesFromIntent可能不会完全符合您的要求。根据文档,您应该通过在意图中设置明确的活动来使用它。然后将查询活动元数据,并假定元数据将具有偏好。你可以做的一件事就是将子选项屏幕与特定的活动关联起来。更好的选择可能是将自己的数据包含在意图中,自己解析数据,然后执行addPreferencesByResource(),资源依赖于传递的数据。 –
好的我得到了AddPreferencesFromIntent来执行,我的元数据位于我的清单中的错误位置。我现在得到的第一个屏幕,但点击一个子屏幕上我得到错误/ AndroidRuntime(2408):android.view.WindowManager $ BadTokenException:无法添加窗口 - 标记null不适用于我看到别人报告的应用程序。我通过复制我感兴趣的子级别的xml文件并为其创建新的活动来解决此问题。如果我可以将一个包含在xml中,那么这将是确定的,但是这需要在首选项xml中为我工作。 – Ifor