为父视图传递演示者的最佳方法

时间:2017-08-23 08:31:30

标签: java android mvp android-mvp

我正在编写基于多层MVP的应用程序。 所有图层的常用方法都转到BASE图层。 然后,每个子类的具体方法转到MIDDLE和TOP层。

从代码示例中,您可以看到我将我的视图传递给演示者作为create方法的参数。

我的问题是我应该如何将演示者传递给家长观点。 我可以这样做,如BASE图层演示者在创建视图时将其自身附加到视图中的示例中所示吗? 或者顶层图片片段(创建演示者)是否应将演示者附加到父片段。

或许还有另一种方法来处理这种情况。

BASE LAYER

public interface BaseView extends BaseProgressDialogInterface{
    void setPresenter(BasePresenter presenter);
}

public class BaseFragment extends Fragment implements BaseView{
    private BasePresenter presenter;

    @Override
    public void setPresenter(BasePresenter presenter) {
        this.presenter = presenter;
    }

    public void randomEvent(){
        if (presenter != null)
            presenter.doSomething();
    }
}

public class BasePresenter {
    private final BaseView view;

    public BasePresenter(BaseView view) {
        this.view = view;
        view.setPresenter(this);
    }

    public void doSomething(){
        //Do something..
    }
}

MIDDLE LAYER

public interface BaseMainScreenView extends BaseView{
    void startSomeActivity();
}

public class BaseMainScreenFragment extends BaseFragment implements BaseMainScreenView {
    //Can be called from multiple top classes
    public void startSomeActivity (){
        //Starting other activity, do not need a presenter in this class
    }
}

public class BaseMainScreenPresenter extends BasePresenter {
    private final BaseMainScreenView view;

    public BaseMainScreenPresenter(BaseMainScreenView view) {
        super(view);
        this.view = view;
    }

    //Other logic...

}

TOP LAYER

public interface TopFragmentView extends BaseMainScreenView {
    //...
}

public class TopFragment extends BaseMainScreenFragment implements TopFragmentView {
    private TopFragmentPresenter presenter;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        presenter = new TopFragmentPresenter(this);
    }

    public void topEvent(){
        presenter.topAction();
    }
}

public class TopFragmentPresenter extends BaseMainScreenPresenter {
    private final TopFragment view;

    public TopFragmentPresenter(TopFragment view) {
        super(view);
        this.view = view;
    }

    public void topAction(){
        view.startSomeActivity();
    }
}

0 个答案:

没有答案