Скрытие / отображение предпочтений в PreferenceFragment без всплывающих окон / -In Effect - PullRequest
0 голосов
/ 04 марта 2019

Мы разрабатываем приложение для Android, которое предлагает пользователю различные наборы функций в зависимости от настроек на странице его / ее профиля.Выбранный набор функций также влияет на страницу настроек приложений (показывает более или менее настройки).Что мы делаем в настоящее время, если пользователь нажимает на странице настроек:

  1. загрузка пользовательских данных через ViewModel (из базы данных Room)
  2. , как только пользовательские данные становятся доступны, проверьте набор функций
  3. итерации по предпочтениям и проверка, должны ли они быть видимыми для этого набора функций
  4. , если предпочтение не должно быть видимым, удалите его из представления, но удерживайте его в списке удаленных предпочтений
  5. если пользователь изменился, добавьте обратно все предпочтения и проверьте, какие префы должны быть скрыты (см. 3)

Проблема в том, что в (2), когда пользовательские данные доступны, представление уже былосоздан, поэтому элементы уже видны и удаляются при регистрации в (3).Это вызывает визуальный «всплывающий» эффект.

Мы не можем решить, должно ли предпочтение быть видимым до того, как пользовательские данные станут доступны на шаге (2).

Тест 1- Использование setVisible

Я знаю, что есть метод setVisible () для привилегий в v7.Однако использование метода setVisible может быть сделано только в (3), и поэтому снова слишком поздно.Я могу установить настройки, невидимые в файле XML:

 app:isPreferenceVisible="false" 

, однако нам нужно сделать их видимыми, если они должны быть видимыми, что можно сделать только в (3), что затем вызовет эффект всплывающего окна(вместо всплывающего окна)

Тест 2 - Управление PreferenceScreen

Я пытался скрыть весь экран до тех пор, пока настройки не будут обработаны (и сделать его видимым впоследствии).Но, к сожалению, вызов

PreferenceScreen prefScreen = getPreferenceScreen();
prefScreen.setVisible(false);

в начале шага (2) не имел никакого эффекта.

Тест 3 - Доступ к представлению

Я пробовал нечто подобное с видом

View view = getView();
if(view != null)
    view.setVisibility(View.GONE);

, но это также не имело никакого эффекта.

Кто-нибудь знает решение этой проблемы?Любой метод или вариант, который я пропустил до сих пор?

...