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

OSCHINA-MIRROR/luckybilly-Gloading

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Gloading

中文文档

Show global loading status view in a low coupling way for Android App.

JavaDocs | Download Demo

Latest Version: Download

Lightweight: aar is less than 6KB, just 170 code lines and 104 comment lines within only 1 java file.

Design as Adapter pattern, with good compatibility: most third-party LoadingViews can be used as Gloading views in the Adapter.

Demo

Wrap activity page

Load success Load failed and click retry Load success with empty data This loading status UI is special

Wrap view(s)

Wrap single view Wrap views Wrap in GridView Wrap in RecyclerView
No words below

Usage

compile 'com.billy.android:gloading:1.0.0'

1. Provide global loading status views

For global usage, create an Adapter to provide views for all status via getView(...) method.

Note: Activity/Fragment/View reused in 2 or more apps with different loading status views?

Just provide a different Adapter for each app.
No need to change any usage code

demo

public class GlobalAdapter implements Gloading.Adapter {
    @Override
    public View getView(Gloading.Holder holder, View convertView, int status) {
        GlobalLoadingStatusView loadingStatusView = null;
        //reuse the old view, if possible
        if (convertView != null && convertView instanceof GlobalLoadingStatusView) {
            loadingStatusView = (GlobalLoadingStatusView) convertView;
        }
        if (loadingStatusView == null) {
            loadingStatusView = new GlobalLoadingStatusView(holder.getContext(), holder.getRetryTask());
        }
        loadingStatusView.setStatus(status);
        return loadingStatusView;
    }
    
    class GlobalLoadingStatusView extends RelativeLayout {

        public GlobalLoadingStatusView(Context context, Runnable retryTask) {
            super(context);
            //init view ...
        }
        
        public void setStatus(int status) {
            //change ui by different status...
        }
    }
}

See demo code.

2. Init Gloading by Adapter before use it

Gloading.initDefault(new GlobalAdapter());

Note: Use AutoRegister to decoupling this step.

3. Show global loading status views in all pages

3.1 Wrap something and return a Gloading.Holder object

//Gloading wrapped whole activity, wrapper view: android.R.id.content
Gloading.Holder holder = Gloading.getDefault().wrap(activity);

//with load failed retry task
Gloading.Holder holder = Gloading.getDefault().wrap(activity).withRetry(retryTask);

or

//Gloading will create a FrameLayout to wrap it
Gloading.Holder holder = Gloading.getDefault().wrap(view);

//with load failed retry task
Gloading.Holder holder = Gloading.getDefault().wrap(view).withRetry(retryTask);

3.2 Show status views for loading/loadFailed/empty/... by Gloading.Holder

//show loading status view by holder
holder.showLoading() 

//show load success status view by holder (frequently, hide gloading)
holder.showLoadSuccess()

//show load failed status view by holder (frequently, needs retry task)
holder.showFailed()

//show empty status view by holder. (load completed, but data is empty) **holder.showEmpty()**

More Gloading.Holder APIs

Практика

1. Оберните в BaseActivity/BaseFragment

public abstract class BaseActivity extends Activity {

    protected Gloading.Holder mHolder;

    /**
     * Сделайте обёртку Gloading.Holder с текущей активностью по умолчанию
     * Переопределите этот метод в подклассе, чтобы выполнить специальную инициализацию
     */
    protected void initLoadingStatusViewIfNeed() {
        if (mHolder == null) {
            // привяжите представление состояния к корневому представлению активности по умолчанию
            mHolder = Gloading.getDefault().wrap(this).withRetry(new Runnable() {
                @Override
                public void run() {
                    onLoadRetry();
                }
            });
        }
    }

    protected void onLoadRetry() {
        // переопределите этот метод в подклассе для выполнения задачи повтора
    }

    public void showLoading() {
        initLoadingStatusViewIfNeed();
        mHolder.showLoading();
    }

    public void showLoadSuccess() {
        initLoadingStatusViewIfNeed();
        mHolder.showLoadSuccess();
    }

    public void showLoadFailed() {
        initLoadingStatusViewIfNeed();
        mHolder.showLoadFailed();
    }

    public void showEmpty() {
        initLoadingStatusViewIfNeed();
        mHolder.showEmpty();
    }

}

2. Вызов суперметодов внутри подклассов


public class GlobalFailedActivity extends BaseActivity {
    private ImageView imageView;
    private String picUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //do sth init...
        loadData();
    }

    private void loadData() {
        showLoading();
        loadDataAndCallback(new Callback() {
            public void success(Data data) {
                if (isEmpty(data)) {
                    showEmpty();
                } else {
                    //do sth with data...
                    showLoadSuccess();
                }
            }
            public void failed() {
                //do sth...
                showLoadFailed();
            }
        });
    }

    @Override
    protected void onLoadRetry() {
        loadData();
    }
    
    //other codes...
}

Режим отладки

//режим отладки. если установлено значение true, журналы будут выводиться в logcat
Gloading.debug(trueOrFalse);

Спасибо

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

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

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

Комментарии ( 0 )

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

Введение

Описание недоступно Развернуть Свернуть
Apache-2.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