MVP 模式View 基类
+ * + * @author jiahui + * @date 2017/12/7 + */ +public interface IMvpBaseView { + +} diff --git a/library/src/main/java/com/chwl/library/base/PresenterEvent.java b/library/src/main/java/com/chwl/library/base/PresenterEvent.java new file mode 100644 index 0000000..f29b41c --- /dev/null +++ b/library/src/main/java/com/chwl/library/base/PresenterEvent.java @@ -0,0 +1,12 @@ +package com.chwl.library.base; + +public enum PresenterEvent { + + CREATE, + START, + RESUME, + PAUSE, + STOP, + DESTROY + +} \ No newline at end of file diff --git a/library/src/main/java/com/chwl/library/base/factory/AbstractMvpPresenter.java b/library/src/main/java/com/chwl/library/base/factory/AbstractMvpPresenter.java new file mode 100644 index 0000000..f192692 --- /dev/null +++ b/library/src/main/java/com/chwl/library/base/factory/AbstractMvpPresenter.java @@ -0,0 +1,145 @@ +package com.chwl.library.base.factory; + +import android.os.Bundle; +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.trello.rxlifecycle3.LifecycleProvider; +import com.trello.rxlifecycle3.LifecycleTransformer; +import com.trello.rxlifecycle3.OutsideLifecycleException; +import com.trello.rxlifecycle3.RxLifecycle; +import com.chwl.library.base.IMvpBaseView; +import com.chwl.library.base.PresenterEvent; + +import io.reactivex.Observable; +import io.reactivex.functions.Function; +import io.reactivex.subjects.BehaviorSubject; + +/** + *MVP模式Present 基类 ,跟Activity,Fragment等生命周期绑定
+ * + * @author jiahui + * @date 2017/12/7 + */ +public abstract class AbstractMvpPresenter管理Presenter的声明周期以及与View之间的关联
+ * + * @author jiahui + * @date 2017/12/8 + */ +public class BaseMvpProxy标注创建Presenter的注解
+ * + * @author jiahui + * @date 2017/12/8 + */ +@Inherited +@Retention(RetentionPolicy.RUNTIME) +public @interface CreatePresenter { + Class extends AbstractMvpPresenter> value(); +} diff --git a/library/src/main/java/com/chwl/library/base/factory/PresenterMvpFactory.java b/library/src/main/java/com/chwl/library/base/factory/PresenterMvpFactory.java new file mode 100644 index 0000000..6acae82 --- /dev/null +++ b/library/src/main/java/com/chwl/library/base/factory/PresenterMvpFactory.java @@ -0,0 +1,19 @@ +package com.chwl.library.base.factory; + + +import com.chwl.library.base.IMvpBaseView; + +/** + *Presenter 工厂接口
+ * + * @author jiahui + * @date 2017/12/7 + */ +public interface PresenterMvpFactoryPresenter 工厂实现类
+ * + * @author jiahui + * @date 2017/12/8 + */ +public class PresenterMvpFactoryImplmPresenterClass; + + private PresenterMvpFactoryImpl(Class
presenterClass) {
+ this.mPresenterClass = presenterClass;
+ }
+
+ /**
+ * 根据注解创建Presenter的工厂实现方法
+ *
+ * @param viewClass 需要创建Presenter的V层实现类
+ * @param 当前要创建的Presenter类型
+ * @return 工厂实现类
+ */
+ public static pClass = null;
+ if (annotation != null) {
+ pClass = (Class ) annotation.value();
+ }
+ return pClass == null ? null : new PresenterMvpFactoryImpl<>(pClass);
+
+ }
+
+ @Override
+ public P createMvpPresenter() {
+ try {
+ return mPresenterClass.newInstance();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException(ResUtil.getString(R.string.base_factory_presentermvpfactoryimpl_01), e);
+ }
+ }
+}
diff --git a/library/src/main/java/com/chwl/library/base/factory/PresenterProxyInterface.java b/library/src/main/java/com/chwl/library/base/factory/PresenterProxyInterface.java
new file mode 100644
index 0000000..cb1a988
--- /dev/null
+++ b/library/src/main/java/com/chwl/library/base/factory/PresenterProxyInterface.java
@@ -0,0 +1,34 @@
+package com.chwl.library.base.factory;
+
+
+import com.chwl.library.base.IMvpBaseView;
+
+/**
+ * 提供设置工厂,获取工厂,获取Presenter的方法,由V层实现这个接口