我一直在关注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");
}
}
这是我的片段:
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);
...
所以我的问题是,这是正确的方法吗?我可以在活动中将Presenter注册到Fragment中吗?如果不是正确的方法,是否有一些很好的例子来处理一个活动和多个片段的MVP?
谢谢你们,BR!
正如你在谷歌的样本(https://github.com/googlesamples/android-architecture)中看到的那样,Activities
创造了Presenters
。此外Views
附加到Activity
和Presenters
获取视图(Fragments
)作为参数。
在Fragment
事务提交或Fragment
(查看)状态恢复Presenters
得到创建并采取Fragments
(视图)作为参数比调用
view.setPresenter(T presenter);
观察方法和Presenters
注册查看。
我认为在Presenter
创建Fragment
不是一个好习惯。首先,它们是分开的层。这对于关注点分离是非法的。第二,如果你在Fragment
中创建演示者,你将你的Presenter的生命绑定到视图的LifeCycle
,当Fragment
被销毁并重新创建时,你创建了一个新的演示者,但它们是不同的层。
该模型是定义要在用户界面中显示或以其他方式操作的数据的接口。
演示者对模型和视图起作用。它从存储库(模型)中检索数据,并将其格式化以在视图中显示。
视图是一个被动接口,它显示数据(模型)并将用户命令(事件)路由到演示者以对该数据进行操作。
所以Activity
可以充当overall controller
,创造Presenters
和Views
并连接它们。
如果我们谈论您的问题,是的,您可以在片段中注册演示者。但是,您应该避免在用作视图的片段中创建演示者。
但是在Android社区中有很多关于MVP模式的方法,如下所示。 https://plus.google.com/communities/114285790907815804707
为什么活动不是ui元素? http://www.techyourchance.com/activities-android/