阅读 11974

又有MVP新写法了,这次我认为挺不错的。

EasyMvp

一个简单强大且灵活的MVP框架。 项目地址:EasyMvp

特点

  • 一个 Activity 可以绑定多个 Presenter,以达到最大的复用功能。
  • 采用注解的方式实现依赖注入,减少耦合。
  • 可以灵活管理生命周期。
  • 使用起来方便简单
  • 使用例子可以在项目中找到。

使用方法

(以简单的登陆注册为例)

  • 单个 Presenter 的情况
  1. 定义好你的 View 层接口方法并继承一个公共的 BaseMvpView 如 LoginView:
public interface LoginView extends BaseMvpView {
    void loginSuccess();
}


复制代码
  1. 编写 LoginPresenter 继承 BasePresenter 并实现你的 Presenter 功能方法:
public class LoginPresenter extends BasePresenter<LoginView> {

    public void login() {
        mView.loginSuccess();
    }
}
复制代码
  1. Activity 继承 BaseMvpActivity 并实现你的 View 接口:
@CreatePresenter(presenter = LoginPresenter.class)
public class ExampleActivity3 extends BaseMvpActivity<LoginPresenter> implements LoginView {

    @Override
    protected int getContentView() {
        return R.layout.activity_main;
    }

    @Override
    public void init() {
        getPresenter().login();
    }

    @Override
    public void loginSuccess() {
        Log.i("ExampleActivity1", "登陆成功");
    }
}

复制代码

其中在 Activity 中,Presenter 实例的获取方法可以有上面代码所示的通过 getPresenter 来获取,这种方法需要在 BaseMvpActivity 后面 填入泛型参数你的 Presenter 实现类,比如上面所示的 LoginPresenter。 除了这种方法,也可以通过注解的方式获取实例:

@CreatePresenter(presenter = LoginPresenter.class)
public class ExampleActivity3 extends BaseMvpActivity implements LoginView {
    @PresenterVariable
    private LoginPresenter mLoginPresenter;

    @Override
    protected int getContentView() {
        return R.layout.activity_main;
    }

    @Override
    public void init() {
        mLoginPresenter.login();
    }

    @Override
    public void loginSuccess() {
        Log.i("ExampleActivity1", "登陆成功");
    }
}
复制代码

如果不喜欢注解,还可以通过直接获取的方式获取:

@CreatePresenter(presenter = LoginPresenter.class)
public class ExampleActivity3 extends BaseMvpActivity implements LoginView {

    private LoginPresenter mLoginPresenter;

    @Override
    protected int getContentView() {
        return R.layout.activity_main;
    }

    @Override
    public void init() {
      mLoginPresenter = getPresenterProviders().getPresenter(0);
      mLoginPresenter.login();
    }

    @Override
    public void loginSuccess() {
        Log.i("ExampleActivity1", "登陆成功");
    }
}
复制代码

通过 getPresenterProviders().getPresenter(int index) 方法获取,传入的参数是你通过 @CreatePresenter 注解传入的 class 对象的 数组下标,这里因为