- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
首先,我知道 Model View Presenter 有不同的实现方式,在我看来,只要您明确定义了抽象层并履行指定的职责,那么您如何实现此模式就有待解释。我已经在很多只有一个 Activity
的应用程序中实现了这种模式。我现在开始了一个新项目,它有多个 Activity 并附加了 Fragments
,包括嵌套 fragment (ViewPager
)。
我现在正在尝试将 MVP 转化为这个项目,但我遇到了概念障碍,想要一些指导和见解。
到目前为止,我已经创建了上述结构并开始与 View & Presenter 建立 1 : 1 的关系(无论是 Activity
还是 Fragment
)。我觉得这没问题,但是,例如,如果我从 Activity
View 向其 Presenter 发送了执行某项操作的请求,Presenter 将结果返回给 Activity
View 会如何我着手传播结果,即更新当前不处于 Paused()
或 Stop()
状态的所有其他 Activity/fragment 。我觉得在这种情况下应该有一个中央 Presenter 来更新所有必要的 Activity 和 Fragment Views,但我不确定如何去做。
目前,当创建每个 Activity
和 Fragment
时,它会创建一个 Presenter 类的新实例,将自身作为引用传递(Activity 和 Fragment 实现它们自己的接口(interface)),演示者将其存储为 WeakReference
,并可以在返回结果时调用相关接口(interface)方法。
根据文档,每当 Fragments
想要相互通信以及附加的 Activity
时,您应该使用回调接口(interface)。考虑到这一点,我应该有一个 Activity 实现的回调接口(interface)和 Fragments
每当他们请求某些东西时回调,所以本质上只有 Activity 会有一个 Presenter 和 Model 层,Fragments 必须回调为了提出各种要求?
抱歉,如果这听起来有点困惑,希望这足够清楚以理解我想要实现的目标,如果我的思路是正确的......或者完全偏离目标!
最佳答案
我认为在 Activity 中有演示者是可以的。基本上 Activity 就像一个 Controller ,它应该知道演示者。
如果 Activity 或其他 Fragment 也需要它,那么将 Presenter 放在 Fragment 中是错误的。仅当演示者是专门为 fragment 设计的时,才可以将演示者放入 fragment 中。
which the presenter stores as a WeakReference and can invoke the relevant interface methods when returning a result
为什么这里需要一个WeakReference
?如果您有 1:1 关系,那么我假设您的演示者没有自己的生命周期,这意味着它的生命周期取决于 Activity 或 fragment 。没有内存泄漏的风险,因为它不是单例,对吧?有强引用应该是安全的。
我不确定我是否回答了您的问题,因为它看起来有点宽泛。我的观点是, fragment 只是 Activity 的分离“部分”,您应该将它们视为部分。如果presenter只属于这部分,那么它应该在里面。否则它应该处于 Activity 状态。关于使用 interface
访问 Activity,您是正确的,这是 Google 在其示例中使用的一种众所周知的设计方法。
关于android - 多个 Activity/Fragments 和 Model View Presenter 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35804197/
我有一个像这样的 fragment 栈 F1 -> F2 -> F3 -> F4 -> F5 现在我需要删除 F2、F3、F4 fragment 。 我需要如果我从 F5 fragment 按下后退按
我需要帮助来理解以下场景的工作原理以及如何实现结果。 我有一个名为 ShoppingCart 的类。它有一个名为 addItemsToShoppingCartFromPreviousOrder 的方法
我有一个包含 ViewPager 的 fragment 。这个 ViewPager 显然是由其他 Fragments 填充的。 我的问题是,ViewPager 中的 Fragment 是否有任何方法(
所以我正在实现一个 FragmentActivity 并尝试添加一个 fragment ,但是我遇到了多个问题。我以前做过这个,实际上我使用的代码与上一个项目(它工作的地方)相同,但由于某种原因它在这
Closed. This question needs details or clarity。它当前不接受答案。
我想将 Android X fragment (androidx.fragment.app.Fragment) 转换为 Android native fragment (android.app.Fra
假设我有一个包含 10 列文本类型 (20) 的 SQLite 表。 ListFragment 将从数据库中提取 4 列并使用 SimpleCursorAdapter 显示在列表中。 选择后,List
我有一个对话框 fragment ,我为延迟初始化创建了一个类。当我显示对话框时,它显示正常。但是,当我关闭对话框时,它崩溃的原因是: fragment 与 fragment 管理器无关。 我也尝试过
我想在 View 分页器更改为 fragment 时刷新该 fragment 。 package com.mcivisoft.rcbeam; import android.os.Bundle; imp
我有一个名为的 Activity MainActivity 我在容器 R.id.mainContainer 中添加了 fragment “BenefitFragment”。 在 BenefitFrag
所以我有这个 ClientListView,效果很好,可以显示客户,我可以单击一个客户并在右侧获取他们的详细信息(在我的第二个 fragment 中)。由此处的布局定义: 这很好用,但后来我
我试过这段代码,但点击第一个 fragment 中的按钮并没有改变第二个 fragment 中的字符串值。 这是第一个 fragment 的 kotlin 文件。它有两个按钮,点击它们可以更改字符串值
我有以下情况:我打开 fragment A 和目标,通过按钮的单击事件转到 fragment B。当我在 fragment B 中并点击后退按钮(为了返回 fragment A) 我想将一些参数传递给
我制作了一个 NavigationDrawer fragment ,其中包含 Home、Settings、Feedback 等项目。 home 项在点击 home 时应该打开,home 是在应用程序启
我正在一个接一个地替换 2 个 fragment ,两个 fragment 都有不同的选项菜单。当我替换第二个 fragment 时,它也显示第一个 fragment 的菜单。 setHasOptio
我有问题: android.app.Fragment$InstantiationException: Unable to instantiate fragment ${packageName}.${a
我正在研究 fragment 转换。当我用第二个 fragment 替换第一个 fragment 时,它出现在第一个 fragment 的下方。我希望它移动到第一个 fragment 之上。我该怎么做
我在抽屉导航里总共有 12 个 fragment 。每个 fragment 都有 volley 方法。每个 fragment 都显示自己的 Volley 响应,除了 position = 1 和 po
我在我的 Activity 中使用了两个 fragment 。最初我将向 Activity 添加一个 fragment 。然后在第一个 fragment 中使用监听器我想用第二个 fragment 替
我正在实现一个“fragments-101”程序,当相应的按钮被点击时我会替换一个 fragment 。然而,下面的事情发生了: 为什么会这样?为什么初始 fragment 没有被完全替换?MainA
我是一名优秀的程序员,十分优秀!