gpt4 book ai didi

android - 我可以在 Fragment 中注册 MVP Presenter

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:37:40 25 4
gpt4 key购买 nike

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

这是我的演示者:

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");
}
}

这是我的 fragment :

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);
...

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

谢谢大家BR!

最佳答案

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

Fragment 事务提交或 Fragment( View )状态恢复后 Presenters 被创建并获取 Fragments( View ) 作为参数而不是调用

view.setPresenter(T presenter); 

View 的方法和 Presenters 注册以查看。

我认为在 Fragment 中创建 Presenter 不是一个好习惯。首先,它们是独立的层。对于关注点分离,这是非法的。其次,如果您在 Fragment 中创建 Presenter,则将 Presenter 的生命周期绑定(bind)到 View 的 LifeCycle 并且当 Fragment 被销毁并重新创建时,您将创建一个新的演示者,但它们是不同的层。

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

演示者 作用于模型和 View 。它从存储库(模型)中检索数据,并将其格式化以显示在 View 中。

View 是一个被动界面,它显示数据(模型)并将用户命令(事件)路由到演示者以根据该数据采取行动。

因此 Activity 可以充当整体 Controller ,它创建PresentersViews 并将它们连接起来。

enter image description here

如果我们讨论您的问题,是的,您可以在 fragment 中注册演示者。但是您应该避免在用作 View 的 fragment 中创建演示者。

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

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

关于android - 我可以在 Fragment 中注册 MVP Presenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42820003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com