Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MVP:在片段中定义演示者_Android_Fragment_Mvp_Presenter - Fatal编程技术网

Android MVP:在片段中定义演示者

Android 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

我在谷歌和Stackoverflow上做了很多搜索,但我还是很困惑,所以在这里问一个问题

我有一个小的MVP设计模式-

SigninView.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.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()从片段中获取上下文,但这是一种黑客攻击还是标准方法?不是指你,我只是想知道。正如我所说的,我对这件事感到困惑。这不是黑客行为,这是界面的用途。