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();
我在 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();