詹子聪 5 anni fa
parent
commit
a165e4f160

+ 2 - 3
app/src/main/java/com/miekir/newmvp/TestViewModel1.java

@@ -33,8 +33,7 @@ public class TestViewModel1 extends BaseViewModel {
     }
 
     @Override
-    public void detachView() {
-        super.detachView();
-        // todo 这里可以做一些回收的动作
+    public void onTaskCancel() {
+
     }
 }

+ 11 - 42
mvp/src/main/java/com/miekir/mvp/base/BaseActivity.java

@@ -48,8 +48,16 @@ public abstract class BaseActivity extends AppCompatActivity {
         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
         //mBinder = ButterKnife.bind(this);
         mLoadingDialog = new LoadingDialog(this);
+        mLoadingDialog.setCancelListener(new LoadingDialog.OnLoadingCancelListener() {
+            @Override
+            public void onLoadingCancel() {
+                onTaskCancel();
+            }
+        });
     }
 
+    public abstract void onTaskCancel();
+
     protected void hideInputMethod() {
         if (rootView != null) {
             rootView.requestFocus();
@@ -90,54 +98,15 @@ public abstract class BaseActivity extends AppCompatActivity {
     }
 
     public void showLoading() {
-        if (mLoadingDialog == null) {
-            return;
-        }
-
-        if (isMainThread()) {
-            mLoadingDialog.show();
-        } else {
-            runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    mLoadingDialog.show();
-                }
-            });
-        }
+        showLoading(true);
     }
 
     public void showLoading(final boolean cancelable) {
-        if (mLoadingDialog == null) {
-            return;
-        }
-
-        if (isMainThread()) {
-            mLoadingDialog.show(cancelable);
-        } else {
-            runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    mLoadingDialog.show(cancelable);
-                }
-            });
-        }
+        showLoading("", cancelable);
     }
 
     public void showLoading(final String msg) {
-        if (mLoadingDialog == null) {
-            return;
-        }
-
-        if (isMainThread()) {
-            mLoadingDialog.show(msg);
-        } else {
-            runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    mLoadingDialog.show(msg);
-                }
-            });
-        }
+        showLoading(msg, true);
     }
 
     public void showLoading(final String msg, final boolean cancelable) {

+ 10 - 42
mvp/src/main/java/com/miekir/mvp/base/BaseFragment.java

@@ -43,62 +43,30 @@ public abstract class BaseFragment extends Fragment {
         super.onViewCreated(view, savedInstanceState);
         //mBinder = ButterKnife.bind(this, view);
         mLoadingDialog = new LoadingDialog(getActivity());
+        mLoadingDialog.setCancelListener(new LoadingDialog.OnLoadingCancelListener() {
+            @Override
+            public void onLoadingCancel() {
+                onTaskCancel();
+            }
+        });
     }
 
+    public abstract void onTaskCancel();
 
     private boolean isMainThread() {
         return Looper.myLooper() == Looper.getMainLooper();
     }
 
     public void showLoading() {
-        if (mLoadingDialog == null) {
-            return;
-        }
-
-        if (isMainThread()) {
-            mLoadingDialog.show();
-        } else {
-            activity.runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    mLoadingDialog.show();
-                }
-            });
-        }
+        showLoading(true);
     }
 
     public void showLoading(final boolean cancelable) {
-        if (mLoadingDialog == null) {
-            return;
-        }
-
-        if (isMainThread()) {
-            mLoadingDialog.show(cancelable);
-        } else {
-            activity.runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    mLoadingDialog.show(cancelable);
-                }
-            });
-        }
+        showLoading("", cancelable);
     }
 
     public void showLoading(final String msg) {
-        if (mLoadingDialog == null) {
-            return;
-        }
-
-        if (isMainThread()) {
-            mLoadingDialog.show(msg);
-        } else {
-            activity.runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    mLoadingDialog.show(msg);
-                }
-            });
-        }
+        showLoading(msg, true);
     }
 
     public void showLoading(final String msg, final boolean cancelable) {

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

@@ -14,7 +14,7 @@ import com.miekir.mvp.constant.BaseMvpSource;
  * @date 2020/10/7 22:46
  * Description:
  */
-public class BaseViewModel extends ViewModel {
+public abstract class BaseViewModel extends ViewModel {
     //private ThreadLocal<Integer> mThreadLocal = new ThreadLocal<>();
 
     /**
@@ -107,5 +107,9 @@ public class BaseViewModel extends ViewModel {
 
     public void detachView() {
         liveData = null;
+        onTaskCancel();
     }
+
+
+    public abstract void onTaskCancel();
 }

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

@@ -45,6 +45,14 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
         return mLoadingNum;
     }
 
+    @Override
+    public void onTaskCancel() {
+        mLoadingNum = 0;
+        for (BaseViewModel viewModel : mInjectPresenters) {
+            viewModel.onTaskCancel();
+        }
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -215,13 +223,13 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
             try {
                 method.invoke(this, result.getResponseCode(), result.getMessage(), result.getBean(), result.getSourceCode());
             } catch (Exception e) {
-                //e.printStackTrace();
+                e.printStackTrace();
             }
 
             try {
                 method.invoke(this, result.getResponseCode() == BaseMvpResponse.COMMON_SUCCESS, result.getMessage(), result.getBean(), result.getSourceCode());
             } catch (Exception e) {
-                //e.printStackTrace();
+                e.printStackTrace();
             }
         }
     }

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

@@ -11,6 +11,7 @@ import androidx.lifecycle.Observer;
 
 import com.miekir.mvp.base.BaseFragment;
 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;
@@ -57,6 +58,14 @@ public abstract class BaseMvpFragment extends BaseFragment implements IView {
         return mLoadingNum;
     }
 
+    @Override
+    public void onTaskCancel() {
+        mLoadingNum = 0;
+        for (BaseViewModel viewModel : mInjectPresenters) {
+            viewModel.onTaskCancel();
+        }
+    }
+
     @Override
     public  void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         initVariables();
@@ -255,12 +264,21 @@ public abstract class BaseMvpFragment extends BaseFragment implements IView {
         Class objParamClass = result.getBean().getClass();
         for (Method method : mDataMethodList) {
             Class methodParamClass = method.getParameterTypes()[2];
-            if (methodParamClass.isAssignableFrom(objParamClass)) {
-                try {
-                    method.invoke(this, result.getResponseCode(), result.getMessage(), result.getBean(), result.getSourceCode());
-                } catch (Exception e) {
-                    //e.printStackTrace();
-                }
+            // 判断方法的第二个参数类型是否是回调对象的父类
+            if (!methodParamClass.isAssignableFrom(objParamClass)) {
+                continue;
+            }
+
+            try {
+                method.invoke(this, result.getResponseCode(), result.getMessage(), result.getBean(), result.getSourceCode());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+            try {
+                method.invoke(this, result.getResponseCode() == BaseMvpResponse.COMMON_SUCCESS, result.getMessage(), result.getBean(), result.getSourceCode());
+            } catch (Exception e) {
+                e.printStackTrace();
             }
         }
     }

+ 24 - 23
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.content.DialogInterface;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -38,39 +39,27 @@ public class LoadingDialog {
         mLoadingDialog.setContentView(dialogLayout, new LinearLayout.LayoutParams(
                 LinearLayout.LayoutParams.MATCH_PARENT,
                 LinearLayout.LayoutParams.MATCH_PARENT));
+        mLoadingDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
+            @Override
+            public void onCancel(DialogInterface dialog) {
+                if (cancelListener != null) {
+                    cancelListener.onLoadingCancel();
+                }
+            }
+        });
     }
 
 
     public void show() {
-        if (mLoadingDialog != null) {
-            if (!mLoadingDialog.isShowing()) {
-                mLoadingDialog.show();
-                mLoadingView.startAnim();
-            }
-        }
+        show(true);
     }
 
     public void show(boolean cancelable) {
-        if (mLoadingDialog != null) {
-            mLoadingDialog.setCancelable(cancelable);
-            if (!mLoadingDialog.isShowing()) {
-                mLoadingDialog.show();
-                mLoadingView.startAnim();
-            }
-        }
+        show("", cancelable);
     }
 
     public void show(String message) {
-        if (mLoadingDialog != null) {
-            if (!TextUtils.isEmpty(message)) {
-                loadingText.setText(message);
-            }
-
-            if (!mLoadingDialog.isShowing()) {
-                mLoadingDialog.show();
-                mLoadingView.startAnim();
-            }
-        }
+        show(message, true);
     }
 
     public void show(String message, boolean cancelable) {
@@ -93,4 +82,16 @@ public class LoadingDialog {
             mLoadingDialog.dismiss();
         }
     }
+
+    private OnLoadingCancelListener cancelListener;
+    public void setCancelListener(OnLoadingCancelListener cancelListener) {
+        this.cancelListener = cancelListener;
+    }
+
+    public interface OnLoadingCancelListener {
+        /**
+         * dismiss不会触发回调,只有按返回cancel才会回调
+         */
+        void onLoadingCancel();
+    }
 }