好的,這裏是我結束與庫蒂斯的幫助。
基本上在我的代碼開始首選項活動我沒有任何行動的所有喜好和行動,如果你只想要他們中的一些。該動作需要匹配某種偏好或偏好集合上的鍵。
// 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