android - 我应该如何在 MVP 中的 Activity 之间传递数据(例如,单击了哪个项目)?

标签 android android-activity mvp

我有以 MVP 模式显示的项目列表。 View 是一个 Activity(又名 ItemsList)。我想显示下一个 Activity (也是 MVP'ed,又名 ItemDetails),其中包含在 ItemsList 中单击的项目的详细信息。

ItemsList 的模型由存储库中的数据提供。所以实际上它是RMVP。它看起来像这样:

            |->Model<->Presenter<->View [ItemsList]
Repository<-|
            |->Model<->Presenter<->View [ItemDetails]

ItemsList 的模型已经确切地知道单击了哪个模型项目,因此我可以立即将它从 ItemsList 传递到 ItemDetails 而无需获取数据再次从存储库/从数据映射到模型/为 ItemDetails 等制作新模型

我应该如何在 MVP 中的 Activity 之间传递数据(例如点击了哪个项目)?

解决方案一

使用 Intent ( similar to what is discussed here ) 传递这些数据,但是......然后如何处理这些数据?您将它从 Activity( View )中的 Intent 中解压缩,而您应该将它放在 MVP 的另一侧,即在模型中。您将它从 View 通过 Presenter 传递给 Model?

但是 ItemDetails 中的模型不是从“MVP 的下侧”(来自 Repository)创建的,而是从“MVP 的上侧”(来自 Presenter)创建的。

方案二

仅将点击项目的 ID 传递给 ItemDetails View (类似于 android10/Android-CleanArchitectureUserDetailsActivity 中提出的带有字段 private int userId 的内容;这也是 googlecodelabs' NoteDetailPresenter 使用的内容)

但是可能会有问题,因为我可能有两个 Repository 的实现:

  • 一个带有缓存,然后我可以将点击项目的 ID 传递给 ItemDetails View (但它似乎设计过度),类似于 android10/Android-CleanArchitectureUserDetailsActivity 中提出的字段 private int userId;
  • 第二次没有缓存,然后我什至无法请求 ID,因为我无权访问为 ItemsList
  • 获取的列表

最佳答案

最近,我也在我的应用中使用了MVP。我发现了同样的问题,并使用 Intent 将数据从 ItemListActivity 传递到 ItemDetailActivity。我通过了实现 Parcelable 接口(interface)的模型类,没有发现任何问题,它工作正常。

原因是:在 ItemDetailActivity 中,我们必须从您的情况下的数据库或存储库中获取数据,这会增加您应用程序中的一个操作。

在 ItemlistActivity 中,您将只执行一次操作来获取所有数据。而如果您将数据从 ItemListActivity 传递到 ItemDetailActivity,那么您只需在 ItemDetailActivity 中获取数据,而无需任何特殊操作。

我建议您采用解决方案 1。

关于android - 我应该如何在 MVP 中的 Activity 之间传递数据(例如,单击了哪个项目)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37163247/

相关文章:

java - GWT 中必要的解除绑定(bind)演示者

android - 如何正确关闭和重新打开房间数据库

Android 任务含义

asp.net - MVP 模式 - 被动 View 并通过 IView 公开复杂类型(Asp.Net、Web 表单)

android从主要 Activity 重启应用程序

java - Android studio 推送通知错误

ios - 我应该在 VIPER/MVP iOS 项目中的什么位置放置 Core Location 方法?

Android:从顶部开始循环进度条(270°)

带有删除按钮的Android ListView

android - 当操作栏的后退按钮被按下时 oncreate 被调用