疫情刚好静下心来回归过去的工作,工作以后往往都是往前跑,其实偶尔多回归下技术,沉淀下来,这是博主抽离的mvp架构,本章源码linkhttps://github.com/apple317/AppleMvp,分为mvp_java和mvp_kotlin两个分支版本,网络组件com.applehsp.http:AppleHttpJava:1.0.0,mvp地址依懒com.applehsp.mvp:MvpKotlin:1.0.7,组件化demo例子请看添加链接描述,源demo源码添加链接描述,需要请评论联系博主,麻烦动动手点个星,万分感谢。
1.支持rxjava、RxLifecycle特性
2.支持加载中过渡扩展
3.支持java、kotlin双版本mvp
4.支持多个Presenter共用
5.插拔式的AOP设计理念
6.支持fragement、activity调用
7.支持依懒引入
8.支持androidx、android两个版本
Mvp
1.Mvp使用说明
1.1 java-mvp库依懒说明
第一步引入依懒,本库已发到jenter中心,请记得在根工程中添加jenter():
第二步添加依懒java-mvp版本库
implementation 'com.applehsp.mvp:MvpJava:1.0.7'
1.2 java-mvp使用说明
public class SplashPresenter extends BasePresenter<SplashView> {
public SplashPresenter() {
}
/**
* 广告方法
* @param message
*/
public void advertList(String message) {
getView().advertList(message);
}
}
public interface SplashView extends IBaseView {
void advertList(String advert);
}
public class MainActivity extends BaseMvpActivity implements SplashView, MainView{
@BindView(R.id.btnSync)
Button btnSync;
@BindView(R.id.btnAdvert)
Button btnAdvert;
//通过注释,通过运行时动态代理p-->v关联,支持多个p注入
@CreatePresenterAnnotation(SplashPresenter.class)
SplashPresenter splashPresenter;
@CreatePresenterAnnotation(MainPresenter.class)
MainPresenter mainPresenter;
@Override
public int setLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initData() {
}
@Override
protected void initView(Bundle savedInstanceState) {
ButterKnife.bind(this);
}
@Override
public void appSync(String msg) {
btnSync.setText(msg);
}
@Override
public void advertList(String advert) {
btnAdvert.setText(advert);
}
@OnClick({
R.id.btnSync, R.id.btnAdvert})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btnSync:
mainPresenter.appSync("首页初始化");
break;
case R.id.btnAdvert:
splashPresenter.advertList("启动页初始化");
break;
}
}
}
1.3 kotlin版本库依懒说明
第一步引入依懒,本库已发到jenter中心,请记得在根工程中添加jenter():
第二步添加依懒java-kotlin版本库
implementation 'com.applehsp.mvp:MvpKotlin:1.0.0'
```java
## 1.4 kotlin版本库使用说明
```kotlin
class SplashPresenter : BasePresenter<SplashView>() {
/**
* 广告方法
* @param message
*/
fun advertList(message: String) {
view!!.advertList(message)
}
}
interface SplashView : IBaseView {
fun advertList(advert: String)
}
class MainActivity : BaseMvpActivity(), SplashView, MainView {
@CreatePresenterAnnotation(SplashPresenter::class)
var splashPresenter: SplashPresenter? = null
@CreatePresenterAnnotation(MainPresenter::class)
var mainPresenter: MainPresenter? = null
override fun setLayoutId(): Int {
return R.layout.activity_main
}
override fun initData() {
btnAdvert.setOnClickListener {
splashPresenter?.advertList("kotlin 广告") }
btnSync.setOnClickListener {
mainPresenter?.appSync("kotlin 同步") }
}
override fun appSync