Работа с длительной загрузкой данных в Spinner - PullRequest
0 голосов
/ 08 мая 2019

У меня есть два спиннера в Android. Пользователь выбирает из первого, а затем второй адаптер Spinner заполняется в зависимости от выбора в первом. Данные должны поступать с REST-сервера (который работает не очень быстро), и поэтому второй Spinner загружается очень долго.

Каков наилучший подход к этому с точки зрения пользовательского интерфейса? Я мог бы сделать несколько вещей, например: показать круг загрузки, где находится Spinner, или отключить второй Spinner, пока не загрузятся новые данные.

Эти решения не кажутся оптимальными, и мне было бы интересно узнать, есть ли лучший способ сделать это.

Обратите внимание, что кэширование всех возможных значений для всех возможных вариантов выбора первого Spinner перед отображением страницы на самом деле не вариант, так как для этого потребуется несколько обращений к серверу, и это займет несколько секунд на вызов. У меня нет контроля над сервером или предоставленными конечными точками.

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Я бы рекомендовал загрузку в стиле скелета.Показывать только реальные элементы управления, которые готовы к использованию.Так что если первый спиннер форсирует вызов API.Я бы использовал «отменяемое сопрограммное задание» таким образом, чтобы его можно было отменить, если они выберут снова.

Затем создайте скелет, вспыхивающий вторым выпадающим анимационным изображением, пока он не будет готов.Круги индикатора занятости заняты, и люди ненавидят их видеть.

Однако, если вы уверены, что хотите делать круги индикаторов занятости, то я бы лично наложил небольшой индикатор занятости на элемент управления счетчика и не настраивал элемент управления счетчиком.фокусируется до тех пор, пока он не будет готов.

Также, если вы реализуете репозиторий и шаблон MVVM, вы можете возвращать кешированные данные, пока вы выбираете обновленные данные, если они соответствуют вашей модели.

https://uxdesign.cc/what-you-should-know-about-skeleton-screens-a820c45a571a

2 голосов
/ 08 мая 2019

Вы мало что можете сделать.Если вызов REST занимает время, ну, это занимает время, и вы ничего не можете с этим поделать, кроме улучшения интернет-соединения.

Единственное, что мне приходит в голову, - это взять все возможные варианты во втором Spinner при загрузке приложения и сохранить его локально в базе данных.Таким образом, возможно, потребуется время, чтобы загрузить приложение только при первом его использовании, но следующие выполнения будут выполняться быстрее, поскольку вам не нужно повторно загружать данные.

Или, просто, простопоказать загрузочный круг.Если сервис REST работает медленно, это не ваша вина ...

...