在具有两个(或多个)片段的单个活动上实现 MVP

2024-01-11

我正在开发一个显示列表的小型应用程序,当单击某个项目时,它会打开一个包含项目详细信息的辅助屏幕。我想实现 MVP 作为我这个应用程序的架构,并且当我有能力时我一直在努力弄清楚如何做到这一点具有 2 个片段的单个 Activity.

出现了一些问题,当单击列表中的某个项目时,回调会发送到第一个演示者,但此时,谁负责打开第二个片段?主持人会互相“交谈”吗?我应该通过活动来做吗?

一直在寻找具有多个片段实现 MVP 的单个活动的示例,但尚未找到类似的东西。

(是的,也可以这样做,但该应用程序的目的是学习在具有多个片段的单个活动上实现 MVP)

感谢任何帮助! 谢谢!


在研究了不同的现有 MVP 示例项目后,我决定遵循 Google 的“TODO-MVP-TABLET”git 项目中的大部分概念,该项目可以在此处找到:

https://github.com/googlesamples/android-architecture/tree/dev-todo-mvp-tablet https://github.com/googlesamples/android-architecture/tree/dev-todo-mvp-tablet

我选择此解决方案是因为抽象级别以及稍后在其他活动中重用任何片段而无需更改任何代码的能力。

解决原则:

  • 每个片段都有一个由接口定义的呈现器。
  • 有一个较大的演示者执行所有较小的演示者。
  • 较大的演示者保存对所有较小演示者的引用,并且当调用方法时,它只是将操作委托给相关的演示者。
  • 片段被赋予“大”演示者作为它们的演示者,而实际上并没有意识到这种情况。
  • 较小的演示者应该保留对视图的引用。

图表取自 Google 的 github 页面:


Update: 链接无效,Google 似乎已从其示例中删除了该项目。会留下它,以防他们重新上传。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在具有两个(或多个)片段的单个活动上实现 MVP 的相关文章

  • 如何在android中将时间转换为“时间之前”

    我的服务器 返回时间 2016 01 24T16 00 00 000Z I want 1 转换为字符串 2 我希望它在从服务器加载时显示 不久前 请 帮我 我认为主要有三种方式 a 内置选项使用SimpleDateFormat and 日期
  • android 4 中的 android RadioButton 问题

    我有一个简单的应用程序 屏幕是在相对布局内构建的 我还有 LinearLayout s 其中之一显示 2 个 RadioButton s 如下所示
  • 我想了解 NfcV ISO-15639 的操作

    我是 NFC 技术新手 我很难理解如何操作块 byte cmd new byte byte 0x20 FLAG byte 0x21 WRITE SINGLE BLOCK COMMAND byte 0x00 byte 0x00 byte 0x
  • React Native fetch() 在 Android 7 上抛出“网络请求失败”,但在 Android 6 上工作正常

    我已经发现 question https stackoverflow com questions 45144938 react native android fetch for https returns network request f
  • 如何监听自定义 URI

    我正在开发一个有自己的 URI 前缀的应用程序 在本例中为 dchub 到处搜索并阅读了很多 但我有点困惑 当有人点击以以下开头的链接时 是否可以启动我的应用程序dchub 在浏览器中 到目前为止 找到了很多从应用程序打开浏览器的其他示例
  • Android 当应用程序启动时显示白屏几秒钟?

    我没有调用任何 URL 请求 该应用程序显示了一个简单的启动屏幕 我也禁用了即时运行 但该警告仍然出现 06 26 09 26 05 022 8709 8709 saurav com navigation drawer I art 后期启用
  • 我的应用程序重新启动后房间数据丢失

    我的应用程序中有一个 Room 的简单实现 它有两个实体 应用程序运行时它工作正常 但应用程序重新启动后我看不到任何数据 这是我的数据库创建代码 Database entities Person class College class ve
  • Recycler查看可见项目的数量

    我正在我的应用程序中创建一个水平 RecyclerView 它必须一次在屏幕上显示 2 个图像 因此每个图像的宽度必须为屏幕的 50 目前它工作正常 但每个项目都会占用屏幕的所有宽度 这是我的代码 mRecyclerView Recycle
  • 如何使用远程 URL 在 Android 模拟器中播放 mp4 视频?

    如何使用远程 URL 在 Android 模拟器中播放 mp4 视频 我使用了以下代码 但此代码给我错误 抱歉 该视频无法播放 07 05 16 58 19 525 INFO AwesomePlayer 34 mConnectingData
  • VideoView中的seekTo

    我在寻找视频时遇到问题 我的应用程序应该从上次停止的位置恢复视频 所以我这样做 videoView seekTo bookmark videoView start 然而 当它播放时 我听到视频开头的声音大约 1 2 秒 只有在该视频寻找到正
  • Android接收短信Intent:获取消息Id或线程Id

    我已经注册了一个广播监听器来接收android provider Telephony SMS DELIVER意向行动 我似乎能够获取这条新消息的正文和发件人电话号码 但是我无法获取此新消息的消息 ID 或线程 ID 我发现的唯一方法是搜索消
  • 返回 RxJava 的 Completable 的方法的命名约定

    我有一个带有视图类的 Android 应用程序 Fragment Activity 观察其ViewModel The ViewModel公开方法 例如getUserName返回Observable
  • 膨胀类 android.support.v7.internal.widget.NativeActionModeAwareLayout 时出错

    如果您以前解决过这个问题 请有人帮助我 我正在尝试使用材料设计制作一些东西 以便应用程序可以运行到 API 10 的低版本 我的代码中没有任何错误 但我不断收到此错误 Android 日志猫 06 01 05 05 37 414 E And
  • 调用 MediaScannerConnection.scanFile 后,MediaStore 内的 Android 缩略图不会刷新

    我正在尝试构建一个类似画廊的应用程序 它将在外部存储上执行以下功能 列出所有包含图像的文件夹 列出所有可供公众使用的图像 不会探测里面的文件Android data 到目前为止 我可以列出所有图像以及包含图像的文件夹 然而 我后来发现这些图
  • API级别29 Intent.ACTION_GET_CONTENT从下载文件夹返回错误的ID

    我正在尝试查找从文件选择器意图返回的 URI 的完整文件路径 我从互联网下载了一张图像 该图像保存在浏览器默认下载文件夹中 问题是 DocumentsContract getDocumentId content describer 返回的
  • 在大画布上滚动

    我需要一些帮助来了解滚动绘制到 Android 画布上的项目的基础知识 假设我想创建一个时间线 其中 0 处的时间是可视化的顶部 并且随着时间的增加 时间线继续呈现在上一个点下方 如果我想在 Android 上渲染它 我知道我可以通过重写
  • Android:如何实现“分布式控制”

    对于与 Android 开发者论坛的交叉发帖表示歉意 那里没有收到任何答复 我有一个有趣的设计挑战 我有一个前端 Activity 和一个后端 用本机 C C 编写 代码 后端是一个复杂的对象 它部分控制 应用程序流程一旦启动就在它自己的线
  • 如何获取特定 GLSurfaceView 的 EGL 显示/上下文

    这是后续我原来的问题 https stackoverflow com questions 6509588 egl vs gles 2 0 on android e g java 这可能太宽泛 而这个可能太具体 但也许我可以应用牛顿法 我的具
  • 按钮的大小取决于屏幕分辨率

    I have LinearLayout有 6 个按钮 在 4 7 英寸大小的分辨率下 按钮几乎是完美的 但在分辨率较高的设备上 它们不会占据整个屏幕 而在分辨率较低的设备上 并非所有按钮都可见 您能否解释一下如何使按钮在不同屏幕分辨率的设备
  • E/libEGL: validate_display:99 错误 3008 (EGL_BAD_DISPLAY) API 24 或更高版本

    当我使用 API 为 24 或更高版本的设备时 我收到此错误 E libEGL validate display 99 错误 3008 EGL BAD DISPLAY XML 代码 activity main xml

随机推荐