我可以在Fragment中注册MVP Presenter吗?

Mil*_*nNz 12 mvp android android-fragments android-activity android-mvp

我一直在关注Google提供的MVP设计模式 来重构我的应用程序.我有一个MainActivity和许多片段,我为每个片段创建活动似乎很麻烦,所以我一直在考虑在片段中注册演示者.我所看到的是每个片段都注册了它自己的演示者,但我不确定它有多大的错误...... :)

所以这是我的演示者:

public class FirstPresenter implements FirstContract.Presenter {
    private final FirstContract.View mView;

    public FirstPresenter(FirstContract.View view) {
        mView = view;
    }

    @Override
    public void start() {
        Log.e(TAG, "Start");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的片段:

public class FirstFragment extends Fragment implements FirstContract.View {
    private FirstContract.Presenter mPresenter;

@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container
            , Bundle savedInstanceState) {
...
// I register firstFragment's presenter here.
mPresenter = new FirstPresenter(this);
...
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,这是正确的方法吗?我可以在活动中将Presenter注册到Fragment中吗?如果不是正确的方法,是否有一些很好的例子来处理一个活动和多个片段的MVP?

谢谢你们,BR!

sav*_*ion 19

正如您在Google的示例中所见(https://github.com/googlesamples/android-architecture),请Activities创建Presenters.还Views附加到ActivityPresenters获取views(Fragments)作为参数.

Fragment事务提交或Fragment(查看)状态恢复后Presenters创建并将Fragments(视图)作为参数而不是调用

view.setPresenter(T presenter); 
Run Code Online (Sandbox Code Playgroud)

视图方法并Presenters注册查看.

我想创建PresenterFragment是不是一个好的做法.首先,它们是分开的层.这对于关注点分离是非法.其次,如果您创建了FragmentPresenter ,则将Presenter的生命绑定到视图,LifeCycle并在Fragment销毁和重新创建时,创建一个新的演示者,但它们是不同的层.

该模型是定义要在用户界面中显示或以其他方式操作的数据的接口.

演示者对模型和视图起作用.它从存储库(模型)中检索数据,并将其格式化以在视图中显示.

视图是一个被动接口,它显示数据(模型)并将用户命令(事件)路由到演示者以对该数据进行操作.

因此Activity可以充当overall controller它创建PresentersViews和连接它们.

在此输入图像描述

如果我们谈论您的问题,是的,您可以在片段中注册演示者.但是,您应该避免在用作视图的片段中创建演示者.

但是在Android社区中有很多关于MVP模式的方法,如下所示. https://plus.google.com/communities/114285790907815804707

为什么活动不是ui元素? http://www.techyourchance.com/activities-android/

  • 正如我在回答中提到的,如果你需要在同一个活动中有多个片段,你可以让活动创建一个新的片段提交片段事务,创建演示者并连接它们.但我没有在谷歌样本中看到这样的实现.他们实施1个活动 - 1个片段. (5认同)