Jelajahi Sumber

不可取消的加载框

詹子聪 5 tahun lalu
induk
melakukan
20f074f358

+ 16 - 3
app/src/main/java/com/miekir/newmvp/LoadingAspect.java

@@ -2,12 +2,16 @@ package com.miekir.newmvp;
 
 import android.util.Log;
 
+import com.miekir.mvp.base.NeedLoading;
+
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.After;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
 
 import java.lang.reflect.Method;
 
@@ -27,13 +31,22 @@ public class LoadingAspect {
         joinPoint.proceed();
     }*/
 
-    @After("timeTask()")
+    @Before("timeTask()")
     public void afterMethod(JoinPoint joinPoint){
         // 注入加载框
         Object targetObject  = joinPoint.getTarget();
         try {
-            Method m = targetObject.getClass().getMethod("showLoading");
-            m.invoke(targetObject);
+            Method showDialogMethod = targetObject.getClass().getMethod("showLoading", String.class);
+            String message = "";
+
+            Method taskMethod = ((MethodSignature)joinPoint.getSignature()).getMethod();
+            if (taskMethod.isAnnotationPresent(NeedLoading.class)) {
+                NeedLoading loading = taskMethod.getAnnotation(NeedLoading.class);
+                if (loading != null) {
+                    message = loading.message();
+                }
+            }
+            showDialogMethod.invoke(targetObject, message);
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 1 - 0
mvp/src/main/java/com/miekir/mvp/base/NeedLoading.java

@@ -12,4 +12,5 @@ import java.lang.annotation.Target;
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.METHOD)
 public @interface NeedLoading {
+    String message() default "";
 }

+ 5 - 1
mvp/src/main/java/com/miekir/mvp/presenter/BaseViewModel.java

@@ -32,10 +32,14 @@ public class BaseViewModel extends ViewModel {
      * 对弹出对话框此时进行计数,归零才dismiss
      */
     public void showLoading() {
+        showLoading("");
+    }
+
+    public void showLoading(String message) {
         if (liveData == null) {
             return;
         }
-        liveData.postValue(new DataResult(0, null, null, BaseMvpSource.DIALOG_SHOW));
+        liveData.postValue(new DataResult(0, message, null, BaseMvpSource.DIALOG_SHOW));
     }
 
     public void dismissLoading() {

+ 6 - 5
mvp/src/main/java/com/miekir/mvp/view/BaseMvpActivity.java

@@ -29,17 +29,18 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
     private List<BaseViewModel> mInjectPresenters = new ArrayList<>();
 
     private volatile int mLoadingNum;
-    public synchronized int onLoadTimeChange(boolean isAdd) {
+    public synchronized int onLoadTimeChange(boolean isAdd, String message) {
         if (isAdd) {
             mLoadingNum = mLoadingNum +1;
         } else {
             mLoadingNum = mLoadingNum -1;
         }
 
-        if (mLoadingNum == 0) {
+        if (mLoadingNum <= 0) {
+            mLoadingNum = 0;
             dismissLoading();
         } else {
-            showLoading();
+            showLoading(message);
         }
         return mLoadingNum;
     }
@@ -83,9 +84,9 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
                         // 回调是在主线程
                         // Log.i("Thread", String.valueOf(Thread.currentThread() == Looper.getMainLooper().getThread()));
                         if (result.getSourceCode() == BaseMvpSource.DIALOG_SHOW) {
-                            onLoadTimeChange(true);
+                            onLoadTimeChange(true, result.getMessage());
                         } else if (result.getSourceCode() == BaseMvpSource.DIALOG_DISMISS) {
-                            onLoadTimeChange(false);
+                            onLoadTimeChange(false, result.getMessage());
                         } else {
                             onDataResult(result);
                         }

+ 6 - 5
mvp/src/main/java/com/miekir/mvp/view/BaseMvpFragment.java

@@ -41,17 +41,18 @@ public abstract class BaseMvpFragment extends BaseFragment implements IView {
     private List<BaseViewModel> mInjectPresenters = new ArrayList<>();
 
     private volatile int mLoadingNum;
-    public synchronized int onLoadTimeChange(boolean isAdd) {
+    public synchronized int onLoadTimeChange(boolean isAdd, String message) {
         if (isAdd) {
             mLoadingNum = mLoadingNum +1;
         } else {
             mLoadingNum = mLoadingNum -1;
         }
 
-        if (mLoadingNum == 0) {
+        if (mLoadingNum <= 0) {
+            mLoadingNum = 0;
             dismissLoading();
         } else {
-            showLoading();
+            showLoading(message);
         }
         return mLoadingNum;
     }
@@ -96,9 +97,9 @@ public abstract class BaseMvpFragment extends BaseFragment implements IView {
                         // 回调是在主线程
                         // Log.i("Thread", String.valueOf(Thread.currentThread() == Looper.getMainLooper().getThread()));
                         if (result.getSourceCode() == BaseMvpSource.DIALOG_SHOW) {
-                            onLoadTimeChange(true);
+                            onLoadTimeChange(true, result.getMessage());
                         } else if (result.getSourceCode() == BaseMvpSource.DIALOG_DISMISS) {
-                            onLoadTimeChange(false);
+                            onLoadTimeChange(false, result.getMessage());
                         } else {
                             onDataResult(result);
                         }

+ 10 - 4
mvp/src/main/java/com/miekir/mvp/widget/LoadingDialog.java

@@ -2,6 +2,7 @@ package com.miekir.mvp.widget;
 
 import android.app.Dialog;
 import android.content.Context;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.LinearLayout;
@@ -48,10 +49,15 @@ public class LoadingDialog {
     }
 
     public void show(String message) {
-        if (mLoadingDialog != null && !mLoadingDialog.isShowing()) {
-            loadingText.setText(message);
-            mLoadingDialog.show();
-            mLoadingView.startAnim();
+        if (mLoadingDialog != null) {
+            if (!TextUtils.isEmpty(message)) {
+                loadingText.setText(message);
+            }
+
+            if (!mLoadingDialog.isShowing()) {
+                mLoadingDialog.show();
+                mLoadingView.startAnim();
+            }
         }
     }