Я нашел ответ в официальных документах и образце.Здесь 2 части:
- Как отследить прогресс, используя LiveData
- Как отразить прогресс на пользовательском интерфейсе
1) Ответ найден наконец Руководство по архитектуре приложения
Прокрутите вниз до темы " Addendum: раскрытие статуса сети ".Они предлагают использовать некоторую оболочку LiveData, основанную на MediatorLiveData
. Существует много стандартного кода, который вы должны написать и поддерживать для переноса любых ваших LiveData, которые должны отслеживать прогресс или ошибки загрузки..
2) В примере Базовая выборка компонентов архитектуры Android вы можете найти предложенный подход к обратной связи процесса загрузки с помощью пользовательского интерфейса.Этот пример действительно прост, поэтому они просто скрывают виджеты пользовательского интерфейса во время загрузки.
В каждом макете фрагмента должны быть какие-то средства поддержки прогресса.Здесь у нас есть только переменная:
<data>
<variable
name="isLoading"
type="boolean" />
</data>
И каждый виджет (представление), который мы хотим скрыть в процессе загрузки, должен иметь атрибут:
app:visibleGone="@{isLoading}"
Так как это приложение определеноатрибут, мы должны позаботиться об этом где-то.Поэтому должен быть адаптер для поддержки visibleGone :
public class BindingAdapters {
@BindingAdapter("visibleGone")
public static void showHide(View view, boolean show) {
view.setVisibility(show ? View.VISIBLE : View.GONE);
}
}
Конечно, мы можем использовать что-то вроде FrameLayout и поместить некоторую панель прогресса, которая затемнит наши элементы управления и покажет некоторое вращающееся колесо прогресса (вместо этогопростого сокрытия этого и показа пустого экрана).Но проблема в том, что вы должны заботиться об этом для каждого макета вашего фрагмента.А если у вас есть несколько сложных экранов (например, вкладок), это может еще больше усложнить ваш код.
Вывод: # 2 - более или менее работоспособное решение.Хотя я бы предпочел отдельный экран с фрагментами прогресса для всех случаев и не разбрасывать каждый из моих макетов фрагментов информацией о ходе загрузки и обработке ошибок.
Но # 1 заставляет меня спросить, в чем реальная выгода от использования LiveData?Чтобы сделать все правильно, с хорошей обработкой ошибок и обратной связью, нам нужно поддерживать слишком много стандартного кода.Они утверждают прямо в собственном руководстве:
В приведенном выше разделе рекомендуемой архитектуры приложения мы пропустили сетевые ошибки и состояния загрузки для упрощения фрагментов кода.
Потому что этоКажется, дизайн LiveData не предназначен для легкого прогресса и обработки ошибок.