繁体   English   中英

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();
}

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

非常感谢。

老实说,我认为您的方法不是处理此问题的最佳方法。 实际上,您可以仅使用观察者模式EventBus来通知演示者何时接收到数据。 这样,您可以将演示者模型分离开来..这样可以使整个体系结构更加整洁。

但是要回答你的问题:

您所有单独的项目都不应直接相互通信。 相反,真正的实现应隐藏在接口后面。 这意味着, 视图演示者一无所知(甚至不知道演示者类是否存在),它只知道暴露该视图所需调用的接口

这样,您可以简单地定义ModelManager演示者之间的通信接口

interface ModelToPresenterInterface {
    void returnData(Object data);
}

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

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

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

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);
        }
    }
}

只要您确定始终只有一个演示者对您的数据感兴趣(这样就不会再有演示者了),那么您也可以只使用一个变量,该变量将为每个新的演示者覆盖。

同样要非常小心,当销毁演示者时,一定要将其从列表中删除! (否则,这将导致严重的内存泄漏)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM