[英]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.