詹子聪 преди 5 години
родител
ревизия
bcabcb2409

+ 2 - 0
mvp/src/main/java/com/miekir/mvp/constant/BaseMvpSource.java

@@ -10,4 +10,6 @@ package com.miekir.mvp.constant;
  */
 public interface BaseMvpSource {
     int COMMON = 0;
+    int DIALOG_SHOW = 99999;
+    int DIALOG_DISMISS = -99999;
 }

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

@@ -27,22 +27,16 @@ public class BaseViewModel extends ViewModel {
         return liveData;
     }
 
-    private volatile int mLoadingNum;
-    public synchronized int onLoadTimeChange(boolean isAdd) {
-        if (isAdd) {
-            mLoadingNum = mLoadingNum +1;
-        } else {
-            mLoadingNum = mLoadingNum -1;
-        }
 
-        return mLoadingNum;
-    }
     /**
-     * 这个方法名不能改动
+     * 由于使用了AspectJ,这个方法名不能改动
      * 对弹出对话框此时进行计数,归零才dismiss
      */
     public void showLoading() {
-        onLoadTimeChange(true);
+        if (liveData == null) {
+            return;
+        }
+        liveData.postValue(new DataResult(0, null, null, BaseMvpSource.DIALOG_SHOW));
     }
 
     public void post(int responseCode, String msg, Object dataBean, int sourceCode) {

+ 23 - 2
mvp/src/main/java/com/miekir/mvp/view/BaseMvpActivity.java

@@ -10,6 +10,7 @@ import androidx.lifecycle.Observer;
 import com.miekir.mvp.base.BaseActivity;
 import com.miekir.mvp.bean.DataResult;
 import com.miekir.mvp.constant.BaseMvpResponse;
+import com.miekir.mvp.constant.BaseMvpSource;
 import com.miekir.mvp.presenter.BaseViewModel;
 import com.miekir.mvp.presenter.DataMethod;
 import com.miekir.mvp.presenter.InjectViewModel;
@@ -27,6 +28,17 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
     private List<Method> mDataMethodList = new ArrayList<>();
     private List<BaseViewModel> mInjectPresenters = new ArrayList<>();
 
+    private volatile int mLoadingNum;
+    public synchronized int onLoadTimeChange(boolean isAdd) {
+        if (isAdd) {
+            mLoadingNum = mLoadingNum +1;
+        } else {
+            mLoadingNum = mLoadingNum -1;
+        }
+
+        return mLoadingNum;
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -65,7 +77,13 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
                     public void onChanged(final DataResult result) {
                         // 回调是在主线程
                         // Log.i("Thread", String.valueOf(Thread.currentThread() == Looper.getMainLooper().getThread()));
-                        onDataResult(result);
+                        if (result.getSourceCode() == BaseMvpSource.DIALOG_SHOW) {
+                            onLoadTimeChange(true);
+                        } else if (result.getSourceCode() == BaseMvpSource.DIALOG_DISMISS) {
+                            onLoadTimeChange(false);
+                        } else {
+                            onDataResult(result);
+                        }
                     }
                 };
                 if (injectViewModel.isPersist()) {
@@ -180,7 +198,10 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
      * @param result
      */
     private void onDataResult(DataResult result) {
-        dismissLoading();
+        if (mLoadingNum == 0) {
+            dismissLoading();
+        }
+
         Class objParamClass = result.getBean().getClass();
         for (Method method : mDataMethodList) {
             Class methodParamClass = method.getParameterTypes()[2];

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

@@ -56,7 +56,7 @@ public class LoadingDialog {
     }
 
     public void close() {
-        if (mLoadingDialog != null) {
+        if (mLoadingDialog != null && mLoadingDialog.isShowing()) {
             mLoadingView.stopAnim();
             mLoadingDialog.dismiss();
         }