Android MVP:在 Fragments 中定义 Presenter

Android MVP: defining Presenter in Fragments

我在 Google 和 Whosebug 上做了很多搜索,但我仍然很困惑,所以在这里提问。

我有这个小型 MVP 设计模式 -

SigninView.java

public interface SigninView{

    void onSuccess();
    void onError();
    void onComplete();
}

SigninPresenter.java

public interface SigninPresenter {

    void signIn(String emailID, String password);
}

SigninModel.java

public class SigninModel implements SigninPresenter {

    private SigninView mSigninView;

    public SigninModel(SigninView mSigninView) {
        this.mSigninView = mSigninView;
    }

    @Override
    public void signIn(String emailID, String password) {

        if(emailID.equals("abc@example.com") && password.equals("123")){
            mSigninView.onSuccess();
        }
        else{
            mSigninView.onError();
        }

        mSigninView.onComplete();

    }
}

我想在 Fragment 上实现 SigninView 并定义 SigninPresenter 就像这样 -

SigninPresenter mSigninPresenter = new SigninModel(view_of_mvp);
mSigninPresenter.signIn("adadada", "asads");

在此处查看一份参考资料。我想实现一个 View 并像这样定义一个 Presenter 但是在 Fragment 上 - https://github.com/ashokslsk/Comprehensive-MVP/blob/master/app/src/main/java/com/ashokslsk/mvpexample/MainActivity.java

如何实现?

您实际上不需要传递上下文,而是传递 SigninView 的实现。所以你需要让你的片段实现 SigninView

MyFragment implements SigninView

并简单地用 this 初始化演示者,而不是上下文。事实上,您的演示者不应该对 Android SDK 了解太多,因此它不应该处理上下文。看到这个 .

SigninPresenter mSigninPresenter = new SigninModel(this);

编辑:

你有这样的activity:

public class MainActivity extends AppCompatActivity implements SigninView 

您所要做的就是让您的片段实现 SigninView:

public class MyFragment extends Fragment implements SigninView 

然后,在 onCreateView 中,您可以像这样初始化演示者:

signinPresenter = new SigninPresenterImpl(this);

您的视图已经实现 getContext()。只需将它添加到您的界面中并在您的 SigninModel 中调用它:

SigninPresenter.java

public interface SigninView {

    void onSuccess();
    void onError();
    void onComplete();

    Context getContext();
}

SigninModel.java

mSigninView.getContext();