csh159 / LoadingStateView

A highly expandable Android library for decoupling the code of toolbar or loading status view. (深度解耦标题栏或加载中、加载失败、无数据等视图)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LoadingStateView

English | 中文

License

LoadingStateView is a highly expandable Android library for showing loading status view on the low-coupling way, it is implemented with a Kotlin code of less than 300 lines without comment statement . it not only shows different view like loading, content, error, empty and customized view when loading network data, but also manages title bar.

Feature

  • No need to add view code to the layout.
  • Support for show custom views.
  • Support for use for Activity, Fragment, RecyclerView, View.
  • Support for managing the title bar and add multiple headers.
  • Support for set reload event.
  • Support for update views anytime.
  • Support for use with most third-party libraries.

Demo

Click or scan QR code to download

QR code

Activity(error) View(placeholder) ViewPager(timeout) RecyclerView(cool loading)
SpecialHeader(custom) MultipleHeader(search) SpecialDecorView(scrolling) BottomDecorView(editor)

Getting started

Add it in your root build.gradle at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url 'https://www.jitpack.io' }
    }
}

Add dependencies in your module build.gradle :

dependencies {
  implementation 'com.github.DylanCaiCoding:LoadingStateView:3.0.1'
}

Usage

Step 1. Create a class extends LoadingStateView.ViewDelegate<VH extends ViewHolder>, for example:

public class LoadingViewDelegate extends LoadingStateView.ViewDelegate<LoadingStateView.ViewHolder> {

  @NonNull
  @Override
  public LoadingStateView.ViewHolder onCreateViewHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
    return new LoadingStateView.ViewHolder(inflater.inflate(R.layout.layout_loading_view, parent, false));
  }

  @Override
  public void onBindViewHolder(@NonNull LoadingStateView.ViewHolder holder) {
  }
}

Step 2. Register ViewDelegate with a view type, for example:

LoadingStateView loadingStateView = new LoadingStateView(this);
loadingStateView.register(ViewType.LOADING, new LoadingViewDelegate());
Or if you want to register a global ViewDelegate.
loadingStateView.setViewDelegatePool(pool -> {
  pool.register(ViewType.LOADING, new LoadingViewDelegate());
});

Step 3. Show view by view type, for example:

loadingStateView.showView(viewType);
loadingStateView.showLoadingView(); // view type is ViewType.LOADING
loadingStateView.showContentView(); // view type is ViewType.CONTENT
loadingStateView.showErrorView(); // view type is ViewType.ERROR
loadingStateView.showEmptyView(); // view type is ViewType.EMPTY

When you need to reload data.

loadingStateView.setOnReloadListener(new LoadingStateView.OnReloadListener() {
  @Override
  public void onReload() {
    // request data again
  }
});

//In the adapter
holder.getOnReloadListener.onReload();

When you need to change view after view showed.

loadingStateView.updateView(ViewType.ERROR, (ErrorViewDelegate delegate) -> {
   delegate.msg = "Fail to load, please wait";
});

Advanced usage

Add title view

If you want to add an ordinary title bar above the content.

Similar to the previous usage, create a class extends LoadingStateView.ViewDelegate<VH extends ViewHolder> and set header.

loadingStateView.setDecorHeader(new TitleViewDelegate("title"), new SearchHeaderViewDelegate());

If you want to add an special title bar with linkage effect.

Create a class extends LoadingStateView.DecorViewDelegate to create a decorated view and specify a loading container.

class ScrollingDecorViewDelegate : LoadingStateView.DecorViewDelegate() {
  @NotNull
  override fun onCreateDecorView(@NotNull inflater: LayoutInflater): View {
    return inflater.inflate(R.layout.layout_scrolling, null)
  }

  @NotNull
  fun getContentParent(@NotNull decorView: View): ViewGroup {
    return decorView.findViewById(R.id.content_parent)
  }
}

Then set it up.

loadingStateView.setDecorView(new ScrollingDecorViewDelegate());

LoadingHelper's migration Guide

The original name of this library is LoadingHelper, and some class and method names should be changed later. Old users can check the migration guide and change it to the latest usage. If you feel troublesome and are not obsessive-compulsive, you can also not migrate.

Author's other libraries

Library Description
Longan A collection of Kotlin utils which makes Android application development faster and easier.
ViewBindingKTX The most comprehensive utils of ViewBinding.
MMKV-KTX Easier to use the MMKV.
ActivityResultLauncher Perfect replacement for startActivityForResult()

Thanks

License


Copyright (C) 2019. Dylan Cai

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

A highly expandable Android library for decoupling the code of toolbar or loading status view. (深度解耦标题栏或加载中、加载失败、无数据等视图)

License:Apache License 2.0


Languages

Language:Java 88.6%Language:Kotlin 11.4%