Quellcode durchsuchen

不可取消的加载框

詹子聪 vor 5 Jahren
Ursprung
Commit
c1f986766f

+ 1 - 0
app/src/main/java/com/miekir/newmvp/TestViewModel1.java

@@ -27,6 +27,7 @@ public class TestViewModel1 extends BaseViewModel {
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
+                dismissLoading();
             }
         }).start();
     }

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

@@ -27,7 +27,6 @@ public class BaseViewModel extends ViewModel {
         return liveData;
     }
 
-
     /**
      * 由于使用了AspectJ,这个方法名不能改动
      * 对弹出对话框此时进行计数,归零才dismiss
@@ -39,6 +38,13 @@ public class BaseViewModel extends ViewModel {
         liveData.postValue(new DataResult(0, null, null, BaseMvpSource.DIALOG_SHOW));
     }
 
+    public void dismissLoading() {
+        if (liveData == null) {
+            return;
+        }
+        liveData.postValue(new DataResult(0, null, null, BaseMvpSource.DIALOG_DISMISS));
+    }
+
     public void post(int responseCode, String msg, Object dataBean, int sourceCode) {
         if (liveData == null) {
             return;

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

@@ -36,6 +36,11 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
             mLoadingNum = mLoadingNum -1;
         }
 
+        if (mLoadingNum == 0) {
+            dismissLoading();
+        } else {
+            showLoading();
+        }
         return mLoadingNum;
     }
 
@@ -198,10 +203,6 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
      * @param result
      */
     private void onDataResult(DataResult result) {
-        if (mLoadingNum == 0) {
-            dismissLoading();
-        }
-
         Class objParamClass = result.getBean().getClass();
         for (Method method : mDataMethodList) {
             Class methodParamClass = method.getParameterTypes()[2];

+ 24 - 2
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.BaseMvpSource;
 import com.miekir.mvp.presenter.BaseViewModel;
 import com.miekir.mvp.presenter.DataMethod;
 import com.miekir.mvp.presenter.InjectViewModel;
@@ -39,6 +40,22 @@ public abstract class BaseMvpFragment extends BaseFragment 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;
+        }
+
+        if (mLoadingNum == 0) {
+            dismissLoading();
+        } else {
+            showLoading();
+        }
+        return mLoadingNum;
+    }
+
     @Override
     public  void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         initVariables();
@@ -78,7 +95,13 @@ public abstract class BaseMvpFragment extends BaseFragment 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()) {
@@ -228,7 +251,6 @@ public abstract class BaseMvpFragment extends BaseFragment implements IView {
     }
 
     private void onDataResult(DataResult result) {
-        dismissLoading();
         Class objParamClass = result.getBean().getClass();
         for (Method method : mDataMethodList) {
             Class methodParamClass = method.getParameterTypes()[2];