├── loadingandretrymanager ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── values │ │ │ │ ├── styles.xml │ │ │ │ ├── dimens.xml │ │ │ │ └── strings.xml │ │ │ ├── layout │ │ │ │ ├── activity_category.xml │ │ │ │ ├── activity_fragment_test.xml │ │ │ │ ├── fragment_layout.xml │ │ │ │ ├── base_empty.xml │ │ │ │ ├── item_category.xml │ │ │ │ ├── base_loading.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── activity_anyview_test.xml │ │ │ │ └── base_retry.xml │ │ │ ├── values-w820dp │ │ │ │ └── dimens.xml │ │ │ └── menu │ │ │ │ ├── menu_main.xml │ │ │ │ ├── menu_category.xml │ │ │ │ └── menu_fragment_test.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── zhy │ │ │ │ └── base │ │ │ │ └── loadandretry │ │ │ │ ├── test │ │ │ │ ├── MyApplication.java │ │ │ │ ├── FragmentTestActivity.java │ │ │ │ ├── CategoryActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── AnyViewTestActivity.java │ │ │ │ └── NormalFragment.java │ │ │ │ ├── OnLoadingAndRetryListener.java │ │ │ │ ├── LoadingAndRetryManager.java │ │ │ │ └── LoadingAndRetryLayout.java │ │ └── AndroidManifest.xml │ └── androidTest │ │ └── java │ │ └── com │ │ └── zhy │ │ └── base │ │ └── loadandretry │ │ └── ApplicationTest.java ├── build.gradle └── proguard-rules.pro ├── anyview.gif ├── loadingandtry.gif ├── .gitignore ├── README.md └── LICENSE /loadingandretrymanager/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /anyview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hongyangAndroid/LoadingAndRetryManager/HEAD/anyview.gif -------------------------------------------------------------------------------- /loadingandtry.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hongyangAndroid/LoadingAndRetryManager/HEAD/loadingandtry.gif -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hongyangAndroid/LoadingAndRetryManager/HEAD/loadingandretrymanager/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hongyangAndroid/LoadingAndRetryManager/HEAD/loadingandretrymanager/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hongyangAndroid/LoadingAndRetryManager/HEAD/loadingandretrymanager/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hongyangAndroid/LoadingAndRetryManager/HEAD/loadingandretrymanager/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/layout/activity_category.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | LoadingAndRetryManager 3 | 4 | Hello world! 5 | Settings 6 | CategoryActivity 7 | FragmentTestActivity 8 | 9 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # Files for the Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | 15 | # Gradle files 16 | .gradle/ 17 | build/ 18 | /*/build/ 19 | 20 | # Local configuration file (sdk path, etc) 21 | local.properties 22 | 23 | # Proguard folder generated by Eclipse 24 | proguard/ 25 | 26 | # Log Files 27 | *.log 28 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/menu/menu_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/layout/activity_fragment_test.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/androidTest/java/com/zhy/base/loadandretry/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.zhy.base.loadandretry; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase 10 | { 11 | public ApplicationTest() 12 | { 13 | super(Application.class); 14 | } 15 | } -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/menu/menu_category.xml: -------------------------------------------------------------------------------- 1 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/menu/menu_fragment_test.xml: -------------------------------------------------------------------------------- 1 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/layout/fragment_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/layout/base_empty.xml: -------------------------------------------------------------------------------- 1 | 7 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/layout/item_category.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 15 | 16 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/layout/base_loading.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /loadingandretrymanager/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 22 5 | buildToolsVersion "23.0.0 rc3" 6 | 7 | defaultConfig { 8 | applicationId "com.zhy.base.loadandretry" 9 | minSdkVersion 10 10 | targetSdkVersion 22 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | compile 'com.android.support:appcompat-v7:22.2.1' 25 | } 26 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/java/com/zhy/base/loadandretry/test/MyApplication.java: -------------------------------------------------------------------------------- 1 | package com.zhy.base.loadandretry.test; 2 | 3 | import android.app.Application; 4 | 5 | import com.zhy.base.loadandretry.LoadingAndRetryManager; 6 | import com.zhy.base.loadandretry.R; 7 | 8 | /** 9 | * Created by zhy on 15/8/27. 10 | */ 11 | public class MyApplication extends Application 12 | { 13 | @Override 14 | public void onCreate() 15 | { 16 | super.onCreate(); 17 | LoadingAndRetryManager.BASE_RETRY_LAYOUT_ID = R.layout.base_retry; 18 | LoadingAndRetryManager.BASE_LOADING_LAYOUT_ID = R.layout.base_loading; 19 | LoadingAndRetryManager.BASE_EMPTY_LAYOUT_ID = R.layout.base_empty; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /loadingandretrymanager/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/zhy/android/sdk/android-sdk-macosx/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/java/com/zhy/base/loadandretry/test/FragmentTestActivity.java: -------------------------------------------------------------------------------- 1 | package com.zhy.base.loadandretry.test; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v7.app.AppCompatActivity; 6 | 7 | import com.zhy.base.loadandretry.R; 8 | 9 | public class FragmentTestActivity extends AppCompatActivity 10 | { 11 | 12 | @Override 13 | protected void onCreate(Bundle savedInstanceState) 14 | { 15 | super.onCreate(savedInstanceState); 16 | setContentView(R.layout.activity_fragment_test); 17 | 18 | Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.id_rl_fragment_container); 19 | 20 | if (fragment == null) 21 | { 22 | getSupportFragmentManager().beginTransaction().add(R.id.id_rl_fragment_container, new NormalFragment()).commit(); 23 | } 24 | } 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/layout/activity_anyview_test.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 16 | 17 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/java/com/zhy/base/loadandretry/test/CategoryActivity.java: -------------------------------------------------------------------------------- 1 | package com.zhy.base.loadandretry.test; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | import android.widget.AdapterView; 8 | import android.widget.ArrayAdapter; 9 | import android.widget.ListView; 10 | 11 | import com.zhy.base.loadandretry.R; 12 | 13 | import java.util.Arrays; 14 | import java.util.List; 15 | 16 | public class CategoryActivity extends AppCompatActivity 17 | { 18 | private ListView mListView; 19 | private List mDatas = Arrays.asList("LoadingAndRetry in Activity", "LoadingAndRetry in Fragment", "LoadingAndRetry in Any View"); 20 | 21 | private Class[] mClazz = new Class[]{MainActivity.class, FragmentTestActivity.class,AnyViewTestActivity.class}; 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) 25 | { 26 | super.onCreate(savedInstanceState); 27 | setContentView(R.layout.activity_category); 28 | 29 | mListView = (ListView) findViewById(R.id.id_listview_category); 30 | 31 | mListView.setAdapter(new ArrayAdapter(this, R.layout.item_category, R.id.id_title, mDatas)); 32 | 33 | mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() 34 | { 35 | @Override 36 | public void onItemClick(AdapterView parent, View view, int position, long id) 37 | { 38 | if (position + 1 > mClazz.length) return; 39 | Intent intent = new Intent(CategoryActivity.this, mClazz[position]); 40 | startActivity(intent); 41 | } 42 | }); 43 | 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/java/com/zhy/base/loadandretry/OnLoadingAndRetryListener.java: -------------------------------------------------------------------------------- 1 | package com.zhy.base.loadandretry; 2 | 3 | import android.view.View; 4 | 5 | public abstract class OnLoadingAndRetryListener 6 | { 7 | public abstract void setRetryEvent(View retryView); 8 | 9 | public void setLoadingEvent(View loadingView) 10 | { 11 | } 12 | 13 | public void setEmptyEvent(View emptyView) 14 | { 15 | } 16 | 17 | public int generateLoadingLayoutId() 18 | { 19 | return LoadingAndRetryManager.NO_LAYOUT_ID; 20 | } 21 | 22 | public int generateRetryLayoutId() 23 | { 24 | return LoadingAndRetryManager.NO_LAYOUT_ID; 25 | } 26 | 27 | public int generateEmptyLayoutId() 28 | { 29 | return LoadingAndRetryManager.NO_LAYOUT_ID; 30 | } 31 | 32 | public View generateLoadingLayout() 33 | { 34 | return null; 35 | } 36 | 37 | public View generateRetryLayout() 38 | { 39 | return null; 40 | } 41 | 42 | public View generateEmptyLayout() 43 | { 44 | return null; 45 | } 46 | 47 | public boolean isSetLoadingLayout() 48 | { 49 | if (generateLoadingLayoutId() != LoadingAndRetryManager.NO_LAYOUT_ID || generateLoadingLayout() != null) 50 | return true; 51 | return false; 52 | } 53 | 54 | public boolean isSetRetryLayout() 55 | { 56 | if (generateRetryLayoutId() != LoadingAndRetryManager.NO_LAYOUT_ID || generateRetryLayout() != null) 57 | return true; 58 | return false; 59 | } 60 | 61 | public boolean isSetEmptyLayout() 62 | { 63 | if (generateEmptyLayoutId() != LoadingAndRetryManager.NO_LAYOUT_ID || generateEmptyLayout() != null) 64 | return true; 65 | return false; 66 | } 67 | 68 | 69 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LoadingAndRetryManager 2 | 3 | 无缝为Activity、Fragment、任何View设置等待(loading)、重试(retry)、无数据(empty)页面。 4 | 5 | 6 | ## How to Use 7 | 8 | 如果多个页面共享加载和重试页面,建议全局设置个基本的。比如在Application中: 9 | 10 | ```java 11 | public class MyApplication extends Application 12 | { 13 | @Override 14 | public void onCreate() 15 | { 16 | super.onCreate(); 17 | LoadingAndRetryManager.BASE_RETRY_LAYOUT_ID = R.layout.base_retry; 18 | LoadingAndRetryManager.BASE_LOADING_LAYOUT_ID = R.layout.base_loading; 19 | LoadingAndRetryManager.BASE_EMPTY_LAYOUT_ID = R.layout.base_empty; 20 | } 21 | } 22 | ``` 23 | 24 | 在Activity中: 25 | 26 | ```java 27 | public class MainActivity extends AppCompatActivity 28 | { 29 | LoadingAndRetryManager mLoadingAndRetryManager; 30 | 31 | @Override 32 | protected void onCreate(Bundle savedInstanceState) 33 | { 34 | super.onCreate(savedInstanceState); 35 | setContentView(R.layout.activity_main); 36 | 37 | mLoadingAndRetryManager = LoadingAndRetryManager.generate(this, listener); 38 | 39 | loadData(); 40 | 41 | } 42 | ``` 43 | 44 | 只需要在onCreate中调用`LoadingAndRetryManager.generate(this,callback)`即可。 45 | 46 | * 在Fragment中与Activity中用法一致。 47 | 48 | * 为任何View添加,只需要将第一个参数改成对应的View即可。 49 | 50 | 51 | 如果需要针对单个Activity、Fragment、View定制页面,重写接口的回调方法: 52 | 53 | ```java 54 | public View generateLoadingLayout() 55 | { 56 | return null; 57 | } 58 | 59 | public View generateRetryLayout() 60 | { 61 | return null; 62 | } 63 | 64 | public View generateEmptyLayout() 65 | { 66 | return null; 67 | } 68 | ``` 69 | 即可,针对每个页面都有对应的设置事件的回调,如果有需求直接复写。 70 | 71 | ### API 72 | 73 | * mLoadingAndRetryManager.showContent(); 74 | * mLoadingAndRetryManager.showRetry(); 75 | * mLoadingAndRetryManager.showLoading(); 76 | * mLoadingAndRetryManager.showEmpty(); 77 | 78 | ## 效果图 79 | 80 | * In Activity or Fragment 81 | 82 | 83 | 84 | * In Any View 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /loadingandretrymanager/src/main/res/layout/base_retry.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 16 | 28 | 29 | 41 | 42 |