1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/luckybilly-Gloading

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-zh-CN.md 17 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 12:36 7f04b8e

Gloading

JavaDocs | Demo скачать

Последняя версия: Download

  • Глубоко разделяет глобальные состояния загрузки, загрузки ошибок и пустых данных в приложениях Android для облегчения процесса компонентной модернизации.
  • Разделяет реализацию и использование глобального состояния загрузки.
  • Не требует добавления дополнительных загрузочных состояний в макеты страниц.
  • Может использоваться в Activity, Fragment, а также для отображения состояния загрузки для отдельных видов, таких как ListView, RecyclerView и других.
  • Лёгкий вес: всего один Java-файл, без зависимостей, менее 300 строк кода, из которых более 100 — комментарии, размер aar — всего 6 КБ.
  • Хорошая совместимость:
    • совместимо с Android API версии 1 и выше;
    • совместим с большинством сторонних впечатляющих LoadingView, которые можно использовать в адаптере и предоставлять их Gloading.

Демонстрация

Добавление состояния загрузки к Activity:

Загрузка успешно Загрузка не удалась (нажмите «Повторить») Загрузка успешно (без данных) Использование специальных загрузочных представлений на некоторых страницах

Добавление состояния загрузки к View:

Одиночный вид Несколько видов Для GridView Для RecyclerView (без текста)

Предыстория

Анимация загрузки присутствует почти в каждом приложении Android.

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

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

Стиль UI для состояний загрузки (загрузка, ошибка загрузки, пустые данные) обычно должен быть одинаковым во всех страницах приложения, то есть требуется глобальное единообразие.

Традиционный подход

  1. Определить один или несколько элементов управления или XML-макетов (например, LoadingView), отображающих различные состояния загрузки.
  2. Включить этот элемент управления в макет каждой страницы.
  3. В BaseActivity/BaseFragment инкапсулировать логику инициализации LoadingView и логику отображения изменений состояния загрузки, предоставляя следующие методы дочерним классам: — void showLoading(); //вызов этого метода отображает анимацию загрузки; — void showLoadFailed(); //вызов этого метода отображает интерфейс ошибки загрузки; — void showEmpty(); //вызов этого метода отображает пустую страницу; — void onClickRetry(); //дочерний класс реализует этот метод, который вызывается при повторном нажатии.
  4. Дочерние классы BaseActivity/BaseFragment могут легко использовать функции отображения состояний загрузки через инкапсуляцию, описанную выше.

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

Улучшенный подход

  1. Определить один или несколько элементов управления или XML-макетов (например, LoadingView), отображающих различные состояния загрузки.
  2. Определить инструмент класса (LoadingUtil) для управления LoadingView и отображения различных интерфейсов в зависимости от состояния.
  3. Инкапсулировать использование LoadingUtil в BaseActivity/BaseFragment, предоставив следующие методы дочернему классу: — void showLoading(); //вызов этого метода отображает анимацию загрузки; — void showLoadFailed(); //вызов этого метода отображает интерфейс ошибки загрузки; — void showEmpty(); //вызов этого метода отображает пустую страницу; — void onClickRetry(); //дочерний класс реализует этот метод, который вызывается при повторном нажатии; — abstract int getContainerId(); //дочерний класс должен реализовать этот метод и вернуть идентификатор контейнера, в который будет добавлен LoadingView.
  4. Дочерний класс BaseActivity/BaseFragment может легко использовать функции отображения состояний загрузки через инкапсуляцию, описанную выше.

Преимущество этого подхода заключается в динамическом создании LoadingView и добавлении его в указанный контейнер, что позволяет странице не заботиться о реализации LoadingView, а только указать, где он должен отображаться. Это значительно снижает связанность. Если компания использует только одно приложение, этого достаточно.

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

Как разделить?

Проведём анализ того, чего мы хотим достичь:

— Состояние загрузки страницы может меняться, но код страницы не должен изменяться. — Страница может указывать область отображения LoadingView (например, заголовок навигации не должен перекрываться LoadingView). — Поддержка использования во Fragment. — Поддержка повторного нажатия при ошибке загрузки. — Учёт различий в отображении UI между страницами (например, текст подсказки может различаться).

Определим стратегию

Когда речь заходит о разделении View, легко подумать о AdapterView в системе Android (GridView и ListView являются его подклассами) и ViewPager, RecyclerView и т. д. в пакете поддержки, которые используют Adapter для разделения. Мы также можем следовать этой стратегии для разделения LoadingView.

Использование Gloading для разделения

Gloading — это облегчённый инструмент (всего один файл Java, менее 300 строк, включая более 100 строк комментариев, размер aar составляет всего 6 КБ), основанный на идее Adapter, для глубокого разделения глобальных состояний загрузки в приложениях Android.

  1. Зависимость от Gloading:
compile 'com.billy.android:gloading:1.0.0'
  1. Создайте адаптер и реализуйте логику создания различных состояний представления (загрузки, ошибки загрузки, пустых данных и т.д.) в методе getView().

Gloading не вмешивается в UI-макет, полностью настраиваемый пользователем. Глобальный вид статуса загрузки (GlobalLoadingStatusView) и его использование

  • GlobalLoadingStatusView(holder.getContext(), holder.getRetryTask());

loadingStatusView.setStatus(status); return loadingStatusView; }

class GlobalLoadingStatusView extends RelativeLayout {

public GlobalLoadingStatusView(Context context, Runnable retryTask) { super(context); // Инициализация LoadingView // Если нужно поддерживать нажатие для повтора, в соответствующее время добавить событие нажатия к соответствующему компоненту }

public void setStatus(int status) { // Установка текущего состояния загрузки: загрузка, сбой загрузки, пустые данные и т. д. // Среди них сбой загрузки может определять текущее подключение к сети и может представлять состояние отсутствия сети // Это одна из ветвей состояния сбоя загрузки, вы можете решить, реализовывать ли её самостоятельно } }

  1. Инициализировать адаптер Gloading по умолчанию:

Gloading.initDefault(new GlobalAdapter());

Примечание: можно использовать AutoRegister для автоматической регистрации при загрузке класса Gloading в виртуальную машину, без необходимости регистрации на уровне приложения, что снижает степень связи.

  1. Получить держатель в месте, где требуется использовать LoadingView:

// В Activity с родительским контейнером android.R.id.content Gloading.Holder holder = Gloading.getDefault().wrap(activity);

// Требуется поддержка нажатия для повтора после сбоя загрузки Gloading.Holder holder = Gloading.getDefault().wrap(activity).withRetry(retryTask);

или

// Для отображения состояния загрузки определённого View // Gloading автоматически создаст FrameLayout, обернёт view и отобразит LoadingView внутри Gloading.Holder holder = Gloading.getDefault().wrap(view);

// Требуется поддержка нажатия для повтора после сбоя загрузки Gloading.Holder holder = Gloading.getDefault().wrap(view).withRetry(retryTask);

  1. Использовать Holder для отображения различных состояний загрузки:

• Показать состояние загрузки, обычно отображается анимация загрузки holder.showLoading()

• Отобразить успешное состояние загрузки (обычно скрывает LoadingView) holder.showLoadSuccess()

• Отображение состояния сбоя загрузки holder.showFailed()

• Данные загружены, но данные пусты holder.showEmpty()

• Если вышеуказанные стандартные состояния не могут удовлетворить потребности, можно вызвать другие состояния с помощью этого метода holder.showLoadingStatus(status)

Дополнительные сведения об API см. в JavaDocs Gloading.

  1. Совместимость с многостраничным использованием и повторным использованием View в разных приложениях:

Каждый приложение может иметь разные LoadingView, просто предоставьте разные адаптеры для каждого приложения и вызовите различные Gloading.initDefault (new GlobalAdapter ()); для каждого приложения. Конкретный код использования на странице не требует изменений.

Примечание. Если используется AutoRegister, то для каждого приложения необходимо создать собственный класс реализации Adapter, и регистрация будет выполнена автоматически. Необходимо изменить только два файла gradle:

— Изменить корневой каталог build.gradle, добавить зависимость от AutoRegister

buildscript { //... dependencies { //... classpath 'com.billy.android:autoregister: используйте последнюю версию' } }

— Измените основной файл build.gradle модуля приложения, добавьте следующий код для реализации автоматической регистрации адаптера

apply plugin: 'auto-register' autoregister { registerInfo = [ [ 'scanInterface' : 'com.billy.android.loading.Gloading$Adapter' , 'codeInsertToClassName' : 'com.billy.android.loading.Gloading' , 'registerMethodName' : 'initDefault' ] ] }

Включить/выключить режим отладки

Gloading.debug(trueOrFalse);

Благодарности

Изображения комиксов в демо взяты из: https://www.thiswaifudoesnotexist.net/

Все изображения глобального LoadingView в демо взяты из: https://www.iconfont.cn/

Специальная анимация загрузки в демо взята из: https://github.com/ldoublem/LoadingView/

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/luckybilly-Gloading.git
git@api.gitlife.ru:oschina-mirror/luckybilly-Gloading.git
oschina-mirror
luckybilly-Gloading
luckybilly-Gloading
master