Android MVP:在片段中定义演示者
我在谷歌和Stackoverflow上做了很多搜索,但我还是很困惑,所以在这里问一个问题 我有一个小的MVP设计模式- SigninView.javaAndroid MVP:在片段中定义演示者,android,fragment,mvp,presenter,Android,Fragment,Mvp,Presenter,我在谷歌和Stackoverflow上做了很多搜索,但我还是很困惑,所以在这里问一个问题 我有一个小的MVP设计模式- SigninView.java public interface SigninView{ void onSuccess(); void onError(); void onComplete(); } public interface SigninPresenter { void signIn(String emailID, String p
public interface SigninView{
void onSuccess();
void onError();
void onComplete();
}
public interface SigninPresenter {
void signIn(String emailID, String password);
}
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();
}
}
public interface SigninView {
void onSuccess();
void onError();
void onComplete();
Context getContext();
}
mSigninView.getContext();
登录resenter.java
public interface SigninView{
void onSuccess();
void onError();
void onComplete();
}
public interface SigninPresenter {
void signIn(String emailID, String password);
}
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();
}
}
public interface SigninView {
void onSuccess();
void onError();
void onComplete();
Context getContext();
}
mSigninView.getContext();
signimodel.java
public interface SigninView{
void onSuccess();
void onError();
void onComplete();
}
public interface SigninPresenter {
void signIn(String emailID, String password);
}
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();
}
}
public interface SigninView {
void onSuccess();
void onError();
void onComplete();
Context getContext();
}
mSigninView.getContext();
我想在片段上实现符号视图,并在那里定义符号resenter如下-
SigninPresenter mSigninPresenter = new SigninModel(view_of_mvp);
mSigninPresenter.signIn("adadada", "asads");
请参阅此处的一个参考资料。我想实现一个视图并定义一个这样的演示者,但是在一个片段上-
如何实现这一点?您实际上不需要传递上下文,而是需要传递SignenView的实现。因此,您需要使片段实现
SigninView
MyFragment implements SigninView
只需使用this
而不是上下文初始化演示者。事实上,您的演示者不应该太了解Android SDK,所以它不应该处理上下文。看这个
编辑:
你有这样的活动:
public class MainActivity extends AppCompatActivity implements SigninView
signinPresenter = new SigninPresenterImpl(this);
您所要做的就是让您的片段实现SignenView:
public class MyFragment extends Fragment implements SigninView
然后,在onCreateView中,您可以如下初始化演示者:
public class MainActivity extends AppCompatActivity implements SigninView
signinPresenter = new SigninPresenterImpl(this);
您的视图已经实现了
getContext()
。只需将其添加到界面中,并在符号模型中调用它即可:
登录resenter.java
public interface SigninView{
void onSuccess();
void onError();
void onComplete();
}
public interface SigninPresenter {
void signIn(String emailID, String password);
}
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();
}
}
public interface SigninView {
void onSuccess();
void onError();
void onComplete();
Context getContext();
}
mSigninView.getContext();
signimodel.java
public interface SigninView{
void onSuccess();
void onError();
void onComplete();
}
public interface SigninPresenter {
void signIn(String emailID, String password);
}
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();
}
}
public interface SigninView {
void onSuccess();
void onError();
void onComplete();
Context getContext();
}
mSigninView.getContext();
还有一件事开发人员是否不像我现在这样在MVP中使用片段?我问这个问题是因为我搜索了很多,但实际上我没有找到像这样的东西。我喜欢把事情简单化。实际上,这取决于你的需要。关键是MVP中的视图可以是活动、片段甚至是视图对象。如果你看一看Google的这个代码示例,他们在MVP中使用片段作为视图,因此MVP中通常使用片段作为V,最终这取决于你的需要。在上面的回答中,我们如何在片段中传递“this”作为上下文?片段不从上下文扩展(如活动和服务)所以不能将片段作为上下文传递。您可以调用this.getContext()从片段中获取上下文,但这是一种黑客攻击还是标准方法?不是指你,我只是想知道。正如我所说的,我对这件事感到困惑。这不是黑客行为,这是界面的用途。