首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android如何将数据从模型返回给演示者

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

Stack Overflow用户
提问于 2018-03-28 14:40:22
回答 1查看 1.9K关注 0票数 2

在开发个人Android应用程序一段时间后,我发现通常情况下,活动变得非常大,逻辑和UI操作都很混乱。

因此,为了从UI中分离逻辑,我遇到了MVP模式,现在我正在尝试在我将要开发的应用程序中实现它。

基本上,这就是我的方法:

我现在面临的问题是,为了让数据从一个模型返回到另一个演示者,我会这样做:

代码语言:javascript
复制
public static ModelManager (OnePresenter presenter)
{
    localPresenter = presenter
}

然后:

代码语言:javascript
复制
public onReturnData(){
    localPresenter.returnData();
}

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

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-29 09:56:53

老实说,我不认为你的方法是最好的办法来处理这件事。实际上,您可以使用观察者模式EventBus,在收到数据时通知演示程序。这样,您就可以将演示者模型分开。这应该会使整个架构变得更干净一些。

但要回答你的问题:

您的所有单独项目不应直接相互通信。相反,真正的实现应该隐藏在接口后面。这意味着,视图不知道有关演示程序的任何信息(它甚至不知道演示程序类的存在),它只知道接口,它公开视图E 221所需的调用。

这样,您就可以为ModelManager和演示者之间的通信定义一个接口。

代码语言:javascript
复制
interface ModelToPresenterInterface {
    void returnData(Object data);
}

您的所有演示程序都需要实现这个(当然):

代码语言:javascript
复制
public myPresenter implements ModelToPresenterInterface {
    void returnData(Object data){
        // put your business logic here
    }
}

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

代码语言:javascript
复制
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或其他类似的工具会得到更好的结果,但是这个版本也应该能工作。希望我能帮忙,如果你还有其他问题,请告诉我:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49537488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档