Ответ 1
Решение здесь заключается в том, чтобы раздуть оба файла предпочтений из PreferencesActivity. Например:
addPreferencesFromResource(R.xml.options);
addPreferencesFromResource(R.xml.additional_options);
Можно ли включить один preferences.xml
в другой, как это можно сделать для макетов с тегом <include />
?
Скажем:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen
android:title="@string/pref_group_title_visual">
<include
preferences_filename="xml/pref_visual"/>
</PreferenceScreen>
...
Решение здесь заключается в том, чтобы раздуть оба файла предпочтений из PreferencesActivity. Например:
addPreferencesFromResource(R.xml.options);
addPreferencesFromResource(R.xml.additional_options);
Душа решения показывает работы. Его можно расширить, чтобы показывать только настройки, если вы являетесь разработчиком, используя неподписанную версию приложения;)
addPreferencesFromResource(R.xml.options);
addPreferencesFromResource(R.xml.additional_options);
if (BuildConfig.DEBUG) {
addPreferencesFromResource(R.xml.developer_options);
}
Я создал сообщение в блоге относительно этой проблемы и получил полный рабочий код, доступный для загрузки. http://androidfu.blogspot.com/2012/05/developer-debug-with-nested-preferences.html
Чтобы действительно добиться эффекта вложенности, вы можете использовать эту технику для переноса загруженных настроек в уже загруженную группу.
PreferenceCategory notifications = (PreferenceCategory) getPreferenceScreen ().findPreference (PreferenceKey.pref_notifications.name ());
addPreferencesFromResource (R.xml.pref_notifications, notifications);
Если расширенный addPreferencesFromResource определяется как:
private void addPreferencesFromResource (int id, PreferenceGroup newParent) {
PreferenceScreen screen = getPreferenceScreen ();
int last = screen.getPreferenceCount ();
addPreferencesFromResource (id);
while (screen.getPreferenceCount () > last) {
Preference p = screen.getPreference (last);
screen.removePreference (p); // decreases the preference count
newParent.addPreference (p);
}
}
Он работает для любой группы предпочтений, такой как PreferenceScreen и PreferenceCategory.
Нет, это кажется невозможным. Но есть простой способ обхода. Вы можете сделать еще один PreferenceActivity
, который загружает вложенный PreferenceScreen
. И в основном файле preference.xml вам нужно создать объект Preference
и установить для него Intent
объект в коде (используя метод setIntent()
). Этот Intent
должен использоваться для создания второго PreferenceActivity
.