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

Android MVP How to get data back from model to presenter

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

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

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

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

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

然后:

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

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

非常感谢。

老实说,我认为您的方法不是处理此问题的最佳方法。实际上,您可以只使用 observer 模式EventBus 来通知 presenters 何时收到数据.这样你就可以让你的 presentermodel 分开..这应该会让整个架构更干净一些。

但是要回答你的问题:

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

这样你就可以简单地为 ModelManagerpresenter[=56] 之间的通信定义一个 interface =]:

interface ModelToPresenterInterface {
    void returnData(Object data);
}

所有 演示者 都需要执行此操作(当然):

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

这样,您只需将 接口 (您的每个 演示者 都已实现)传递给 模型管理器。这可能不会在构造函数中发生,因为每个 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 或类似的东西你会得到更好的结果,但这个版本应该也可以。希望我能提供帮助,如果您还有其他问题,请告诉我:)