我一直在关注Google提供的MVP设计模式来重构我的应用程序 . 我有一个MainActivity和许多片段,它一直在考虑在片段中注册演示者 . 我'm seeing is that every fragment register it'拥有主持人,但我不确定它有多大错... :)
所以这是我的演示者:
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!
1 回答
正如您在 Google's 样本(https://github.com/googlesamples/android-architecture)中所见,
Activities
创建Presenters
. 另外Views
附加到Activity
和Presenters
获取视图(Fragments
)作为参数 .Fragment
事务提交后Fragment
(查看)状态恢复Presenters
得到创建并将Fragments
(视图)作为参数而不是调用视图方法和
Presenters
注册查看 .我认为在
Fragment
中创建Presenter
不是一个好习惯 . 首先,它们是 separate layers . 这对 Separation of concerns 来说是非法的 . 第二,如果您在Fragment
中创建演示者,则绑定Presenter 's life to view' sLifeCycle
,当Fragment
被销毁并重新创建时,您将创建一个新的演示者,但它们是不同的层 .The model 是定义要在用户界面中显示或以其他方式操作的数据的接口 .
The presenter 对模型和视图起作用 . 它从存储库(模型)中检索数据,并将其格式化以在视图中显示 .
The view 是一个被动接口,它显示数据(模型)并将用户命令(事件)路由到演示者以对该数据进行操作 .
所以
Activity
可以充当overall controller
,它创建Presenters
和Views
并连接它们 .如果我们谈论您的问题,是的,您可以在片段中注册演示者 . 但是,您应该避免在用作视图的片段中创建演示者 .
但是有关于Android社区中MVP模式的不同方法的're lot'如下所示 . https://plus.google.com/communities/114285790907815804707
为什么活动不是ui元素? http://www.techyourchance.com/activities-android/