Я использую PreferenceFragmentCompat из библиотеки поддержки (preference-v14: 23.0.1 - хотя я также пробовал ее с 23.1.1). У меня есть все мои настройки предпочтений в файле XML и надувать их в onCreatePreferences как обычно:Динамические изменения настроек PreferenceFragmentCompat
@Override
public void onCreatePreferences(final Bundle bundle, final String s) {
addPreferencesFromResource(R.xml.fragment_settings);
Когда фрагмент первым показан, я хочу, чтобы скрыть некоторые предпочтения, пока я не получу результаты сетевого вызова туда, где Возможно, я захочу снова показать эти предпочтения.
Я попытался установить видимость на различных предпочтениях ложны в надежде, что я бы тогда быть в состоянии установить их снова видны позже, но это выглядит следующим образом:
Preference preference = findPreference(getString(R.string.settings_key_value));
preference.setVisible(false);
Эффективно удаляет предпочтение из списка и когда Я снова попробую найти в Preference, затем возвращает null.
В качестве альтернативы, я тогда создал метод, чтобы создать предпочтение, которое я мог бы добавить к соответствующему экран/положение в адаптере:
private Preference createPreference(@StringRes int title, @StringRes int key, @StringRes int summary, int order) {
final Preference preference = new Preference(getContext());
preference.setTitle(title);
preference.setKey(getString(key));
if (summary > 0) {
preference.setSummary(summary);
}
preference.setOrder(order);
return preference;
}
Затем я использую его следующим образом:
final PreferenceCategory category = (PreferenceCategory) findPreference(getString(R.string.settings_category_name));
preference = createPreference(R.string.pref_title, R.string.settings_pref_key, R.string.pref_summary, 0);
category.addPreference(preference);
Однако, когда я делаю это, размер шрифта заголовка предпочтения неверен (и, возможно, другие стили в пределах Предпочтения). Вероятно, это связано с тем, что набор атрибутов предпочтения не задан, и он не наследует стиль предпочтений из моей темы приложения. Есть ли способ правильно надуть индивидуальные предпочтения из xml, чтобы иметь правильный стиль и добавить его в мой список предпочтений или изменить метод createPreference, чтобы он использовал правильный стиль?
Мой AppTheme определяется с помощью следующего соответствующего атрибута:
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
На данный момент я исправил это, заменив SettingsFragment на новый, когда я получаю новую информацию из сети - но, очевидно, это не идеально - он не использует список предпочтений, находящийся в recyclerview и анимировать новые предпочтения соответствующим образом. –