Удалить / скрыть настройки с экрана - PullRequest
129 голосов
/ 11 февраля 2010

У меня есть действие, которое расширяет PreferenceActivity. Я загружаю настройки из файла XML. Но в некоторых случаях мне нужно полностью скрыть одно из предпочтений на экране в зависимости от состояния моего приложения. Есть метод setEnabled, но это не совсем то, что я хочу. Я хочу полностью удалить это предпочтение с экрана. Возможно ли это?

Ответы [ 12 ]

0 голосов
/ 09 октября 2018

Вы можете сделать это двумя способами:

1.Если вы используете библиотеку поддержки, вы можете построить карту дерева предпочтений и их родителей, а затем удалить предпочтение с помощью его родителя. Вот функция для создания такой карты:

public static Map<Preference, PreferenceGroup> buildPreferenceParentTree(@NonNull final PreferenceScreen preferenceScreen) {
    final Map<Preference, PreferenceGroup> result = new HashMap<>();
    final Stack<PreferenceGroup> curParents = new Stack<>();
    curParents.add(preferenceScreen);
    while (!curParents.isEmpty()) {
        final PreferenceGroup parent = curParents.pop();
        final int childCount = parent.getPreferenceCount();
        for (int i = 0; i < childCount; ++i) {
            final Preference child = parent.getPreference(i);
            result.put(child, parent);
            if (child instanceof PreferenceGroup)
                curParents.push((PreferenceGroup) child);
        }
    }
    return result;
}
  1. Если вы используете новый API настроек android-x, вы можете просто установить видимость с помощью функции setVisible .
0 голосов
/ 13 мая 2016

Если вы хотите оценить и на основе этой маски, альтернативой может быть

SwitchPreference autenticacionUsuario = 
    (SwitchPreference) findPreference("key_autenticacion_usuario");

final EditTextPreference Username = 
    (EditTextPreference) findPreference("key_username_mqtt");
final EditTextPreference Password = 
    (EditTextPreference) findPreference("key_password_mqtt");

if (!autenticacionUsuario.isChecked()) {
    PreferenceCategory preferenceCategory = 
        (PreferenceCategory) findPreference("category_mqtt");
    preferenceCategory.removePreference(Username);
    preferenceCategory.removePreference(Password);
}

Все это должно быть в пределах

public static class PrefsFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...