|
|
@@ -4,15 +4,14 @@ package com.miekir.mvp.view.model;
|
|
|
import android.os.Bundle;
|
|
|
import android.text.TextUtils;
|
|
|
|
|
|
+import androidx.lifecycle.MutableLiveData;
|
|
|
import androidx.lifecycle.Observer;
|
|
|
import androidx.lifecycle.ViewModelProvider;
|
|
|
|
|
|
import com.miekir.mvp.base.BaseActivity;
|
|
|
import com.miekir.mvp.base.DataResult;
|
|
|
-import com.miekir.mvp.presenter.BasePresenter;
|
|
|
import com.miekir.mvp.presenter.BaseViewModel;
|
|
|
import com.miekir.mvp.presenter.DataMethod;
|
|
|
-import com.miekir.mvp.presenter.InjectPresenter;
|
|
|
import com.miekir.mvp.presenter.InjectViewModel;
|
|
|
import com.miekir.mvp.view.IView;
|
|
|
|
|
|
@@ -22,15 +21,12 @@ import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
- * 利用反射,BaseMVPActivity将会查找子类中有{@link InjectPresenter}注解的成员变量,
|
|
|
- * 筛选出父类是{@link BasePresenter}的成员变量,对它们进行实例化
|
|
|
- * 然后BaseMVPActivity调用{@link BasePresenter}的一个方法把自身的{@link androidx.lifecycle.LiveData}类型引用
|
|
|
- * 传递给{@link BasePresenter},这样{@link BasePresenter}的子类就可以调用相应Activity的LiveData;
|
|
|
- *
|
|
|
+ * 基于MVP思想的Activity
|
|
|
+ * @author zhan
|
|
|
*/
|
|
|
-public abstract class BaseMVPActivity extends BaseActivity implements IView {
|
|
|
+public abstract class BaseMvpActivity extends BaseActivity implements IView {
|
|
|
private List<Method> mDataMethodList = new ArrayList<>();
|
|
|
- private List<BaseViewModel> mInjectPresenters;
|
|
|
+ private List<BaseViewModel> mInjectPresenters = new ArrayList<>();
|
|
|
|
|
|
@Override
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
@@ -45,8 +41,8 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
|
|
|
* 初始化添加注解的变量
|
|
|
*/
|
|
|
private void initVariables() {
|
|
|
+ clearPresenters();
|
|
|
// 这里可以获取到子类的成员变量
|
|
|
- mInjectPresenters = new ArrayList<>();
|
|
|
Field[] fields = this.getClass().getDeclaredFields();
|
|
|
for (Field field : fields) {
|
|
|
// 获取变量上面的注解类型
|
|
|
@@ -89,10 +85,8 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
|
|
|
* 初始化获取需要回调的注解方法
|
|
|
*/
|
|
|
private void initCallbacks() {
|
|
|
- // 查找回调方法(保证只添加一次)
|
|
|
- if (mDataMethodList.size() != 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ // 查找回调方法
|
|
|
+ mDataMethodList.clear();
|
|
|
|
|
|
Method[] methods = null;
|
|
|
try {
|
|
|
@@ -153,16 +147,27 @@ public abstract class BaseMVPActivity extends BaseActivity implements IView {
|
|
|
@Override
|
|
|
protected void onDestroy() {
|
|
|
super.onDestroy();
|
|
|
- if (mInjectPresenters != null && mInjectPresenters.size() > 0) {
|
|
|
+
|
|
|
+ clearPresenters();
|
|
|
+ mDataMethodList.clear();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void clearPresenters() {
|
|
|
+ if (mInjectPresenters.size() > 0) {
|
|
|
for (BaseViewModel presenter : mInjectPresenters) {
|
|
|
- presenter.getLiveData().removeObservers(this);
|
|
|
+ if (presenter == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ MutableLiveData<DataResult> liveData = presenter.getLiveData();
|
|
|
+ if (liveData == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ liveData.removeObservers(this);
|
|
|
presenter.detachView();
|
|
|
}
|
|
|
mInjectPresenters.clear();
|
|
|
- mInjectPresenters = null;
|
|
|
}
|
|
|
-
|
|
|
- mDataMethodList.clear();
|
|
|
}
|
|
|
|
|
|
/**
|