GithubHelp home page GithubHelp logo

hpdx / loadinghelper Goto Github PK

View Code? Open in Web Editor NEW

This project forked from dylancaicoding/loadingstateview

0.0 0.0 0.0 63.06 MB

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

License: Apache License 2.0

Kotlin 10.96% Java 89.04%

loadinghelper's Introduction

LoadingHelper

English | 中文

LoadingHelper is a highly expandable Android library for showing loading status view on the low-coupling way, it is implemented with a Kotlin code of more than 200 lines without comment statement . it not only shows different view like loading, content, error, empty or 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.
  • Support for preprocessing the content view.

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:LoadingHelper:2.2.0'
}

Usage

Step 1. Create a class extends LoadingHelper.Adapter<VH extends ViewHolder>, for example:

public class LoadingAdapter extends LoadingHelper.Adapter<LoadingHelper.ViewHolder> {

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

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

  }
}

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

LoadingHelper loadingHelper = new LoadingHelper(this);
loadingHelper.register(ViewType.LOADING, new LoadingAdapter());
Or if you want to register a global adapter.
LoadingHelper.setDefaultAdapterPool(adapterPool -> {
  adapterPool.register(ViewType.LOADING, new LoadingAdapter());
  return Unit.INSTANCE;
});

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

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

When you need to reload data.

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

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

When you need to change view after view showed.

ErrorAdapter adapter = loadingHelper.getAdapter(ViewType.Error);
adapter.errorText = "Fail to load, please wait";
adapter.notifyDataSetChanged();

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 LoadingHelper.Adapter<VH extends ViewHolder> and set header.

loadingHelper.register(ViewType.TITLE, new TitleAdapter("title"));
loadingHelper.register(VIEW_TYPE_SEARCH, new SearchHeaderAdapter(onSearchListener));
loadingHelper.setDecorHeader(ViewType.TITLE, VIEW_TYPE_SEARCH);

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

Create a class extends LoadingHelper.DecorAdapter to create a decorated view and specify a loading container.

public class ScrollDecorAdapter extends LoadingHelper.DecorAdapter {
  @NotNull
  @Override
  public View onCreateDecorView(@NotNull LayoutInflater inflater) {
    return inflater.inflate(R.layout.layout_scrolling, null);
  }

  @NotNull
  @Override
  public ViewGroup getContentParent(@NotNull View decorView) {
    return decorView.findViewById(R.id.content_parent);
  }
}

Then set it up.

loadingHelper.setDecorAdapter(new ScrollDecorAdapter());

Preprocessing the content view

Create a adapter extends LoadingHelper.ContentAdapter<VH extends ViewHolder>.

public class CommonContentAdapter extends LoadingHelper.ContentAdapter<LoadingHelper.ViewHolder> {
  @Override
  public LoadingHelper.ViewHolder onCreateViewHolder(@NonNull View contentView) {
    return new LoadingHelper.ViewHolder(contentView);
  }

  @Override
  public void onBindViewHolder(@NonNull LoadingHelper.ViewHolder holder) {
	View contentView = holder.getRootView();
  }
}

Create a LoadingHelper with the ContentAdapter.

LoadingHelper loadingHelper = new LoadingHelper(this, new CommonContentAdapter());

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.

loadinghelper's People

Contributors

caislcode avatar dylancaicoding avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.