在Android中使用MVP传递Bundle Intent

6

我希望通过使用Parceler和Bundle intent将Model数据传递到另一个活动中。我的问题是,如何在Android中使用MVP架构将Presenter层中的数据传递到View层以在另一个活动中显示?

1个回答

12

这是完全有可能的。假设您的 Activity 实现了 View 接口,那么您将在接口中拥有一个类似于以下方法的方法:

void startNextActivity(MyData data);

然后在活动中:

@Override
void startNextActivity(MyData data) {

    // create bundle
    // send intent
}

而在 Presenter 中:

view().startNextActivity(myData);

然而,我不建议您这样做。

我认为,在使用 MVP 模式时,应该谨慎使用一些经典的 Android 模式,包括 onActivityResult 和使用 Bundle 在 Activity / Fragment 之间传递数据等。

为了保持尽可能解耦和干净的状态,Activity 应避免与其他 Activity 交互,Presenter 不应与其他 Presenter 交互等。 如果您需要在另一个 Activity 中访问来自一项 Activity 的数据,则将其发送到模型以进行持久化。 下一个 Activity 将通过其 Presenter 接收此数据,后者将从模型中获取它。

下面的图表提供了更好的概述:

MVP Diagram

与其在启动下一个 Activity 时作为 Bundle 的一部分传递详细信息,不如将其保存在模型中以供下一个 Activity 加载。


1
好的,你的回答确实很有道理。但是如果第三方库需要在调用Activity的onActivityResult()方法中对接收到的数据进行某些处理,你会怎么做呢? - Roach
1
为什么要持久化“selected”项目?这没有任何意义。我的意思是,这不是您长期会看到的东西,您希望在退出DetailsActivity时立即清除选择。更好的解决方案是在存储库中保留缓存项,并在那里保存临时视图状态(已选中/已单击/已选择等)。 - Farid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接