|
|
@@ -5,11 +5,14 @@ import android.os.Looper;
|
|
|
import androidx.lifecycle.ViewModel;
|
|
|
|
|
|
import com.miekir.common.utils.LogTool;
|
|
|
+import com.miekir.mvp.model.IModel;
|
|
|
import com.miekir.mvp.view.IView;
|
|
|
import com.miekir.mvp.view.ViewHandler;
|
|
|
|
|
|
import java.lang.ref.WeakReference;
|
|
|
import java.lang.reflect.Proxy;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
import java.util.Optional;
|
|
|
import java.util.function.Consumer;
|
|
|
|
|
|
@@ -29,8 +32,10 @@ import io.reactivex.disposables.CompositeDisposable;
|
|
|
public abstract class BasePresenter<V extends IView> extends ViewModel {
|
|
|
private WeakReference<V> mViewReference;
|
|
|
protected CompositeDisposable mDisposableList = new CompositeDisposable();
|
|
|
+ private List<IModel> mModelList = new ArrayList<>();
|
|
|
|
|
|
public BasePresenter() {
|
|
|
+ PresenterHelper.initModelList(mModelList, this);
|
|
|
onInit();
|
|
|
}
|
|
|
|
|
|
@@ -50,10 +55,16 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
|
|
|
mViewReference = new WeakReference<V>(view);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ protected void onCleared() {
|
|
|
+ super.onCleared();
|
|
|
+ detachView();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 界面被销毁时
|
|
|
*/
|
|
|
- public void detachView() {
|
|
|
+ private void detachView() {
|
|
|
onTaskCancel();
|
|
|
if (mViewReference != null) {
|
|
|
mViewReference.clear();
|
|
|
@@ -61,18 +72,15 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- protected void onCleared() {
|
|
|
- super.onCleared();
|
|
|
- detachView();
|
|
|
- LogTool.d(getClass().getName(), "view model clear:" + this.toString());
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* todo 当任务被取消时,界面还存在,响应加载框的取消
|
|
|
*/
|
|
|
public void onTaskCancel() {
|
|
|
mDisposableList.dispose();
|
|
|
+ for (IModel model : mModelList) {
|
|
|
+ model.onTaskCancel();
|
|
|
+ }
|
|
|
+ mModelList.clear();
|
|
|
}
|
|
|
|
|
|
/**
|