|
|
@@ -8,7 +8,6 @@ import androidx.annotation.NonNull;
|
|
|
import androidx.annotation.Nullable;
|
|
|
import androidx.lifecycle.MutableLiveData;
|
|
|
import androidx.lifecycle.Observer;
|
|
|
-import androidx.lifecycle.ViewModelProvider;
|
|
|
|
|
|
import com.miekir.mvp.base.BaseFragment;
|
|
|
import com.miekir.mvp.base.DataResult;
|
|
|
@@ -69,9 +68,10 @@ public abstract class BaseMvpFragment extends BaseFragment implements IView {
|
|
|
field.setAccessible(true);
|
|
|
|
|
|
// 父类引用指向子类对象
|
|
|
- //BaseViewModel presenter = type.newInstance();
|
|
|
Class<? extends BaseViewModel> type = (Class<? extends BaseViewModel>) field.getType();
|
|
|
- BaseViewModel presenter = new ViewModelProvider(this).get(type);
|
|
|
+ BaseViewModel presenter = type.newInstance();
|
|
|
+ // 下面这种方法是单例形式,会造成重复回调的问题
|
|
|
+ //BaseViewModel presenter = new ViewModelProvider(this).get(type);
|
|
|
|
|
|
// 创建一个观察者去更新UI
|
|
|
final Observer<DataResult> observer = new Observer<DataResult>() {
|
|
|
@@ -82,11 +82,15 @@ public abstract class BaseMvpFragment extends BaseFragment implements IView {
|
|
|
onDataResult(result);
|
|
|
}
|
|
|
};
|
|
|
- presenter.getLiveData().observe(this, observer);
|
|
|
+ if (injectViewModel.isPersist()) {
|
|
|
+ presenter.getLiveData().observeForever(observer);
|
|
|
+ } else {
|
|
|
+ presenter.getLiveData().observe(this, observer);
|
|
|
+ }
|
|
|
|
|
|
field.set(this, presenter);
|
|
|
mInjectPresenters.add(presenter);
|
|
|
- } catch (IllegalAccessException e) {
|
|
|
+ } catch (IllegalAccessException | java.lang.InstantiationException e) {
|
|
|
e.printStackTrace();
|
|
|
} catch (ClassCastException e) {
|
|
|
e.printStackTrace();
|