[英]Android MVP: defining Presenter in Fragments
我在谷歌和Stackoverflow上做了很多搜索,但我仍然很困惑,所以在这里问一个问题。
我有这个小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();
}
}
我想在片段上实现SigninView并在其中定义SigninPresenter ,就像这样 -
SigninPresenter mSigninPresenter = new SigninModel(view_of_mvp);
mSigninPresenter.signIn("adadada", "asads");
请参阅此处的一个参考 我想实现一个View并定义一个这样的Presenter但是在片段上 - 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);
编辑:
你有这样的活动:
public class MainActivity extends AppCompatActivity implements SigninView
您所要做的就是让您的片段实现SigninView:
public class MyFragment extends Fragment implements SigninView
然后,在onCreateView中,您可以像这样初始化演示者:
signinPresenter = new SigninPresenterImpl(this);
您的View已经实现了getContext()
。 只需将其添加到您的界面中并在SigninModel
调用它:
SigninPresenter.java
public interface SigninView {
void onSuccess();
void onError();
void onComplete();
Context getContext();
}
SigninModel.java
mSigninView.getContext();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.