Если вы хотите что-то, что будет динамически изменять префиксы, например, в 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();
}
}
Единственный недостаток, который я могу видеть с этим, - это вспышка, поскольку экран воссоздан с нуля.