|
|
@@ -4,8 +4,10 @@ import androidx.lifecycle.ViewModel;
|
|
|
|
|
|
import com.miekir.common.utils.LogTool;
|
|
|
import com.miekir.mvp.view.IView;
|
|
|
+import com.miekir.mvp.view.ViewHandler;
|
|
|
|
|
|
import java.lang.ref.WeakReference;
|
|
|
+import java.lang.reflect.Proxy;
|
|
|
|
|
|
/**
|
|
|
* Copyright (C), 2019-2020, Miekir
|
|
|
@@ -19,14 +21,24 @@ import java.lang.ref.WeakReference;
|
|
|
|
|
|
*/
|
|
|
public abstract class BasePresenter<V extends IView> extends ViewModel {
|
|
|
- private WeakReference<V> wrf;
|
|
|
+ private WeakReference<V> mViewReference;
|
|
|
|
|
|
- public V getView() {
|
|
|
- return wrf == null ? null : wrf.get();
|
|
|
+ private ViewHandler mViewHandler;
|
|
|
+ public V getCallbackView() {
|
|
|
+ mViewHandler.setView(getView());
|
|
|
+ return (V) Proxy.newProxyInstance(
|
|
|
+ Thread.currentThread().getContextClassLoader(),
|
|
|
+ mViewHandler.getClazz().getInterfaces(),
|
|
|
+ mViewHandler);
|
|
|
+ }
|
|
|
+
|
|
|
+ private V getView() {
|
|
|
+ return mViewReference == null ? null : mViewReference.get();
|
|
|
}
|
|
|
|
|
|
public void attachView(V view) {
|
|
|
- wrf = new WeakReference<V>(view);
|
|
|
+ mViewHandler = new ViewHandler(view.getClass());
|
|
|
+ mViewReference = new WeakReference<V>(view);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -41,9 +53,9 @@ public abstract class BasePresenter<V extends IView> extends ViewModel {
|
|
|
*/
|
|
|
public void detachView() {
|
|
|
onTaskCancel();
|
|
|
- if (wrf != null) {
|
|
|
- wrf.clear();
|
|
|
- wrf = null;
|
|
|
+ if (mViewReference != null) {
|
|
|
+ mViewReference.clear();
|
|
|
+ mViewReference = null;
|
|
|
}
|
|
|
}
|
|
|
|