Мы разрабатываем приложение для Android, которое предлагает пользователю различные наборы функций в зависимости от настроек на странице его / ее профиля.Выбранный набор функций также влияет на страницу настроек приложений (показывает более или менее настройки).Что мы делаем в настоящее время, если пользователь нажимает на странице настроек:
- загрузка пользовательских данных через ViewModel (из базы данных Room)
- , как только пользовательские данные становятся доступны, проверьте набор функций
- итерации по предпочтениям и проверка, должны ли они быть видимыми для этого набора функций
- , если предпочтение не должно быть видимым, удалите его из представления, но удерживайте его в списке удаленных предпочтений
- если пользователь изменился, добавьте обратно все предпочтения и проверьте, какие префы должны быть скрыты (см. 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);
, но это также не имело никакого эффекта.
Кто-нибудь знает решение этой проблемы?Любой метод или вариант, который я пропустил до сих пор?