Ver código fonte

Activity搞定

詹子聪 5 anos atrás
pai
commit
2bc7007898

+ 6 - 7
app/src/main/java/com/miekir/newmvp/ui/home/HomeActivity.java

@@ -5,16 +5,15 @@ import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 
-import com.miekir.mvp.constant.MvpRepository;
 import com.miekir.mvp.presenter.InjectPresenter;
 import com.miekir.mvp.view.BaseMvpActivity;
 import com.miekir.newmvp.R;
-import com.miekir.newmvp.ui.home.article.presenter.ArticlePresenter;
+import com.miekir.newmvp.ui.home.article.presenter.SimpleArticlePresenter;
 
 public class HomeActivity extends BaseMvpActivity implements View.OnClickListener, IArticleView {
 
     @InjectPresenter
-    ArticlePresenter mArticlePresenter;
+    SimpleArticlePresenter mArticlePresenter;
 
     @Override
     public int getLayoutId() {
@@ -30,13 +29,13 @@ public class HomeActivity extends BaseMvpActivity implements View.OnClickListene
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
-            case R.id.btn_task:
-                // 点击之后,后台执行耗时操作
-                mArticlePresenter.with(MvpRepository.REPO_NET).fetchArticleData();
-                break;
             case R.id.btn_jump:
                 startActivity(new Intent(HomeActivity.this, HomeActivity.class));
                 break;
+            case R.id.btn_task:
+                // 点击之后,后台执行耗时操作
+                mArticlePresenter.doWork();
+                break;
             default:
                 break;
         }

+ 3 - 0
app/src/main/java/com/miekir/newmvp/ui/home/article/presenter/SimpleArticlePresenter.java

@@ -26,6 +26,7 @@ public class SimpleArticlePresenter extends BasePresenter<IArticleView> {
      * 直接在Presenter执行任务
      */
     public void doWork() {
+        showProgress();
         Disposable disposable = Observable.create((ObservableOnSubscribe<String>) emitter -> {
             try {
                 Thread.sleep(5000);
@@ -40,7 +41,9 @@ public class SimpleArticlePresenter extends BasePresenter<IArticleView> {
         .subscribe(next -> {
             LogTool.d("MainPresenter", "onNext thread is: " + Thread.currentThread().getName());
             post(view -> view.onArticleResult("result"));
+            hideProgress();
         }, error -> {
+            hideProgress();
             LogTool.d(getClass().getName(), error.getMessage());
         });
 

+ 34 - 21
mvp/src/main/java/com/miekir/mvp/base/BaseActivity.java

@@ -19,7 +19,6 @@ import com.miekir.mvp.widget.LoadingDialog;
 public abstract class BaseActivity extends AppCompatActivity {
     private LoadingDialog mLoadingDialog;
     private View rootView;
-    //private Unbinder mBinder;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -27,9 +26,6 @@ public abstract class BaseActivity extends AppCompatActivity {
         //if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
         //    getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
         //}
-        // 重新create之后,activity对象不一样
-        //Log.d(getClass().getName(), "obj is : "  + this.toString());
-
         super.onCreate(savedInstanceState);
         rootView = LayoutInflater.from(this).inflate(getLayoutId(), null);
         setContentView(rootView);
@@ -52,14 +48,20 @@ public abstract class BaseActivity extends AppCompatActivity {
         mLoadingDialog.setCancelListener(new LoadingDialog.OnLoadingCancelListener() {
             @Override
             public void onLoadingCancel() {
-                // todo 这个方法不执行
-                onTaskCancel();
+                mLoadingTime = 0;
+                onProgressTaskCancel();
             }
         });
     }
 
-    public abstract void onTaskCancel();
+    /**
+     * 可见任务被取消
+     */
+    public abstract void onProgressTaskCancel();
 
+    /**
+     * 隐藏输入法
+     */
     protected void hideInputMethod() {
         if (rootView != null) {
             rootView.requestFocus();
@@ -86,7 +88,6 @@ public abstract class BaseActivity extends AppCompatActivity {
     @Override
     protected void onDestroy() {
         super.onDestroy();
-        dismissLoading();
         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
     }
 
@@ -110,7 +111,30 @@ public abstract class BaseActivity extends AppCompatActivity {
         showLoading(msg, true);
     }
 
+    private volatile int mLoadingTime = 0;
+    private synchronized void onLoadTimeChange(boolean isShow) {
+        if (isShow) {
+            mLoadingTime++;
+        } else {
+            mLoadingTime--;
+        }
+
+        if (mLoadingTime <= 0 && mLoadingDialog != null) {
+            mLoadingTime = 0;
+            if (isMainThread()) {
+                mLoadingDialog.close();
+            } else {
+                runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        mLoadingDialog.close();
+                    }
+                });
+            }
+        }
+    }
     public void showLoading(final String msg, final boolean cancelable) {
+        onLoadTimeChange(true);
         if (mLoadingDialog == null) {
             return;
         }
@@ -127,18 +151,7 @@ public abstract class BaseActivity extends AppCompatActivity {
         }
     }
 
-    public void dismissLoading() {
-        if (mLoadingDialog != null) {
-            if (isMainThread()) {
-                mLoadingDialog.close();
-            } else {
-                runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-                        mLoadingDialog.close();
-                    }
-                });
-            }
-        }
+    public void hideLoading() {
+        onLoadTimeChange(false);
     }
 }

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

@@ -85,7 +85,7 @@ public abstract class BaseFragment extends Fragment {
         }
     }
 
-    public void dismissLoading() {
+    public void hideLoading() {
         if (mLoadingDialog != null) {
             if (isMainThread()) {
                 mLoadingDialog.close();
@@ -104,7 +104,7 @@ public abstract class BaseFragment extends Fragment {
     public void onDestroyView() {
         super.onDestroyView();
         //mBinder.unbind();
-        dismissLoading();
+        hideLoading();
         activity = null;
     }
 }

+ 1 - 0
mvp/src/main/java/com/miekir/mvp/model/BaseModel.java

@@ -17,6 +17,7 @@ public abstract class BaseModel {
 
     public void onProgressTaskCancel() {
         mProgressDisposableList.dispose();
+        mProgressDisposableList = new CompositeDisposable();
         LogTool.d(getClass().getName(), "progress model cancel");
     }
 

+ 22 - 0
mvp/src/main/java/com/miekir/mvp/presenter/BasePresenter.java

@@ -92,12 +92,34 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
      */
     public void onProgressTaskCancel() {
         mProgressDisposableList.dispose();
+        mProgressDisposableList = new CompositeDisposable();
+
         for (IModel model : mProgressModelList) {
             model.onProgressTaskCancel();
         }
         mProgressModelList.clear();
     }
 
+    /**
+     * 显示加载框
+     */
+    public void showProgress() {
+        IView view = getView();
+        if (view != null) {
+            view.showLoading();
+        }
+    }
+
+    /**
+     * 加载框消失
+     */
+    public void hideProgress() {
+        IView view = getView();
+        if (view != null) {
+            view.hideLoading();
+        }
+    }
+
     /**
      * 初始化
      */

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

@@ -17,9 +17,9 @@ public abstract class BaseMvpActivity extends BaseActivity implements IView {
     private List<BasePresenter<?>> mInjectPresenters = new ArrayList<>();
 
     @Override
-    public void onTaskCancel() {
-        for (BasePresenter<?> viewModel : mInjectPresenters) {
-            viewModel.onProgressTaskCancel();
+    public void onProgressTaskCancel() {
+        for (BasePresenter<?> presenter : mInjectPresenters) {
+            presenter.onProgressTaskCancel();
         }
     }
 

+ 1 - 4
mvp/src/main/java/com/miekir/mvp/view/IView.java

@@ -2,8 +2,5 @@ package com.miekir.mvp.view;
 
 public interface IView {
     void showLoading();
-
-    void showLoading(String msg);
-
-    void dismissLoading();
+    void hideLoading();
 }

+ 45 - 0
network/src/main/java/com/miekir/network/core/impl/DialogObserver.java

@@ -0,0 +1,45 @@
+package com.miekir.network.core.impl;
+
+import com.miekir.mvp.presenter.BasePresenter;
+import com.miekir.network.core.base.BaseObserver;
+
+import io.reactivex.annotations.NonNull;
+import io.reactivex.disposables.Disposable;
+
+/**
+ * 进度条观察者
+ * 需要进度条时,调用onSubscribe同时显示进度条,
+ * 流程走到onComplete/onError时隐藏进度条。
+ * @author Miekir
+ * 变为发送通知增加dialog显示次数
+ */
+
+public abstract class DialogObserver<T> extends BaseObserver<T> {
+    private BasePresenter<?> mPresenter;
+
+    public DialogObserver(BasePresenter<?> presenter) {
+        mPresenter = presenter;
+    }
+
+    @Override
+    public void onSubscribe(@NonNull Disposable d) {
+        super.onSubscribe(d);
+        if (d.isDisposed()) {
+            return;
+        }
+
+        mPresenter.showProgress();
+    }
+
+    @Override
+    public void onComplete() {
+        super.onComplete();
+        mPresenter.hideProgress();
+    }
+
+    @Override
+    public void onError(@NonNull Throwable e) {
+        super.onError(e);
+        mPresenter.hideProgress();
+    }
+}

+ 0 - 1
network/src/main/java/com/miekir/network/core/impl/ProgressObserver.java

@@ -14,7 +14,6 @@ import io.reactivex.disposables.Disposable;
  * 需要进度条时,调用onSubscribe同时显示进度条,
  * 流程走到onComplete/onError时隐藏进度条。
  * @author Miekir
- * todo 改造一下,变为发送通知增加dialog显示次数,不持有Context,持有presenter或iview即可
  */
 
 public abstract class ProgressObserver<T> extends BaseObserver<T> {