Gloading
Добавление состояния загрузки к Activity:
Загрузка успешно | Загрузка не удалась (нажмите «Повторить») | Загрузка успешно (без данных) | Использование специальных загрузочных представлений на некоторых страницах |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Добавление состояния загрузки к View:
Одиночный вид | Несколько видов | Для GridView | Для RecyclerView (без текста) |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Анимация загрузки присутствует почти в каждом приложении Android.
В ситуациях, когда пользователю нужно подождать, отображение анимации загрузки позволяет ему понять, что приложение загружает данные, а не зависло, обеспечивая тем самым лучший пользовательский опыт.
Аналогично, если данные пусты, отображение соответствующего представления данных или при ошибке загрузки — отображение соответствующего интерфейса и поддержка повторного нажатия улучшают пользовательский опыт по сравнению с пустым экраном.
Стиль UI для состояний загрузки (загрузка, ошибка загрузки, пустые данные) обычно должен быть одинаковым во всех страницах приложения, то есть требуется глобальное единообразие.
Этот подход имеет высокую степень связывания, так как каждый макет страницы должен включать LoadingView. Это неудобно в использовании и требует больших затрат на обслуживание, поскольку любое изменение дизайна может потребовать значительных усилий.
Преимущество этого подхода заключается в динамическом создании LoadingView и добавлении его в указанный контейнер, что позволяет странице не заботиться о реализации LoadingView, а только указать, где он должен отображаться. Это значительно снижает связанность. Если компания использует только одно приложение, этого достаточно.
Однако этот подход всё ещё связан: страница и используемый ею LoadingView остаются связанными. Если необходимо повторно использовать его в других приложениях, каждое из которых может иметь свой собственный стиль UI, соответствующий LoadingView также может отличаться, и для повторного использования необходимо сначала отделить страницу от LoadingView.
— Состояние загрузки страницы может меняться, но код страницы не должен изменяться. — Страница может указывать область отображения LoadingView (например, заголовок навигации не должен перекрываться LoadingView). — Поддержка использования во Fragment. — Поддержка повторного нажатия при ошибке загрузки. — Учёт различий в отображении UI между страницами (например, текст подсказки может различаться).
Когда речь заходит о разделении View, легко подумать о AdapterView в системе Android (GridView и ListView являются его подклассами) и ViewPager, RecyclerView и т. д. в пакете поддержки, которые используют Adapter для разделения. Мы также можем следовать этой стратегии для разделения LoadingView.
Gloading — это облегчённый инструмент (всего один файл Java, менее 300 строк, включая более 100 строк комментариев, размер aar составляет всего 6 КБ), основанный на идее Adapter, для глубокого разделения глобальных состояний загрузки в приложениях Android.
compile 'com.billy.android:gloading:1.0.0'
Gloading не вмешивается в UI-макет, полностью настраиваемый пользователем. Глобальный вид статуса загрузки (GlobalLoadingStatusView) и его использование
loadingStatusView.setStatus(status); return loadingStatusView; }
class GlobalLoadingStatusView extends RelativeLayout {
public GlobalLoadingStatusView(Context context, Runnable retryTask) { super(context); // Инициализация LoadingView // Если нужно поддерживать нажатие для повтора, в соответствующее время добавить событие нажатия к соответствующему компоненту }
public void setStatus(int status) { // Установка текущего состояния загрузки: загрузка, сбой загрузки, пустые данные и т. д. // Среди них сбой загрузки может определять текущее подключение к сети и может представлять состояние отсутствия сети // Это одна из ветвей состояния сбоя загрузки, вы можете решить, реализовывать ли её самостоятельно } }
Gloading.initDefault(new GlobalAdapter());
Примечание: можно использовать AutoRegister для автоматической регистрации при загрузке класса Gloading в виртуальную машину, без необходимости регистрации на уровне приложения, что снижает степень связи.
// В 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);
• Показать состояние загрузки, обычно отображается анимация загрузки holder.showLoading()
• Отобразить успешное состояние загрузки (обычно скрывает LoadingView) holder.showLoadSuccess()
• Отображение состояния сбоя загрузки holder.showFailed()
• Данные загружены, но данные пусты holder.showEmpty()
• Если вышеуказанные стандартные состояния не могут удовлетворить потребности, можно вызвать другие состояния с помощью этого метода holder.showLoadingStatus(status)
Дополнительные сведения об API см. в JavaDocs Gloading.
Каждый приложение может иметь разные 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 )