gpt4 book ai didi

Android MVP 如何将数据从模型返回给演示者

转载 作者:行者123 更新时间:2023-11-29 18:58:13 26 4
gpt4 key购买 nike

在开发个人 Android 应用程序一段时间后,我发现 Activity 通常会变得非常大,并且逻辑和 UI 操作都非常困惑。

在寻找一种将逻辑与 UI 分开的方法时,我遇到了 MVP 模式,现在我正尝试在我要开发的应用程序中实现它。

所以基本上这就是我的方法:

enter image description here

我现在面临的问题是,为了将数据从模型返回给演示者,我会做这样的事情:

public static ModelManager (OnePresenter presenter)
{
localPresenter = presenter
}

然后:

public onReturnData(){
localPresenter.returnData();
}

问题是模型管理器可以随时从任何演示者调用,所以我如何传递通用演示者的引用?

非常感谢。

最佳答案

老实说,我认为您的方法不是处理此问题的最佳方法。实际上,您可以只使用观察者模式EventBus 来在接收到数据时通知演示者。这样你就可以让你的 presentermodel 分开。这应该会让整个架构更清晰一些。

但要回答您的问题:

所有单独的项目不应直接相互通信。相反,真正的实现应该隐藏在接口(interface) 后面。这意味着,viewpresenter 一无所知(它甚至不知道 presenter 类的存在),它只知道接口(interface)公开了 View 需要的调用。

这样您就可以简单地为 ModelManagerpresenter 之间的通信定义一个接口(interface):

interface ModelToPresenterInterface {
void returnData(Object data);
}

您所有的演示者 都需要实现这一点(当然):

public myPresenter implements ModelToPresenterInterface {
void returnData(Object data){
// put your business logic here
}
}

这样,您只需将接口(interface)(您的每个演示者 都已实现)传递给ModelManager。这可能不会发生在构造函数中,因为每个 presenter 都只会使用一个管理器实例。

static class ModelManager{

List<ModelToPresenterInterface> callbackList = new ArrayList<>();

void addListeningPresenter(ModelToPresenterInterface presenter){
callbackList.push(presenter);
}

public onReturnData(Object data){
for (int i = 0;i<callbackList.size();++i){
callbackList.get(i).returnData(object);
}
}
}

只要您确定总是只有一个presenter 对您的数据感兴趣(这样堆栈中就没有presenter),那么您也可以只使用一个变量,它会为每个新的 presenter 覆盖。

还要非常小心,当它被销毁时,您确实要从列表中删除演示者!(否则会造成严重的内存泄漏)

再一次:我真的认为使用 EventBus 或类似的东西你会得到更好的结果,但这个版本应该也可以。希望我能提供帮助,如果您还有其他问题,请告诉我:)

关于Android MVP 如何将数据从模型返回给演示者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49537488/

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