Якщо ви хочете щось, що буде динамічно змінювати префікси, наприклад, на SwitchPreference, я знайшов найкращий спосіб - помістити всі мої додаткові параметри в дві контейнери категорії. Спочатку у вас все буде показано, потім ви просто видалите біти, які вам не потрібні. Розумний біт, ви просто запускаєте відтворювати, коли щось змінюється, і тоді вам не потрібно нічого створювати вручну або турбуватися про те, щоб повернути речі в правильному порядку.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
PreferenceCategory prefCatOne= (PreferenceCategory)findPreference("prefCatOne");
PreferenceCategory prefCatTwo= (PreferenceCategory)findPreference("prefCatTwo");
SwitchPreference mySwitchPref= (SwitchPreference)findPreference("mySwitchPref");
PreferenceScreen screen = getPreferenceScreen();
if (mySwitchPref.isChecked()) {
screen.removePreference(prefCatOne);
} else {
screen.removePreference(prefCatTwo);
}
}
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("mySwitchPref")) {
this.recreate();
}
}
Єдиний недолік, який я бачу з цим, - це спалах, коли екран відтворюється з нуля.