在开发个人Android应用程序一段时间后,我发现通常情况下,活动变得非常大,逻辑和UI操作都很混乱。
因此,为了从UI中分离逻辑,我遇到了MVP模式,现在我正在尝试在我将要开发的应用程序中实现它。
基本上,这就是我的方法:

我现在面临的问题是,为了让数据从一个模型返回到另一个演示者,我会这样做:
public static ModelManager (OnePresenter presenter)
{
localPresenter = presenter
}然后:
public onReturnData(){
localPresenter.returnData();
}问题是模型管理器可以在任何时候从任何演示者处调用,所以我如何传递泛型演示者的引用?
非常感谢。
发布于 2018-03-29 09:56:53
老实说,我不认为你的方法是最好的办法来处理这件事。实际上,您可以使用观察者模式或EventBus,在收到数据时通知演示程序。这样,您就可以将演示者与模型分开。这应该会使整个架构变得更干净一些。
但要回答你的问题:
您的所有单独项目不应直接相互通信。相反,真正的实现应该隐藏在接口后面。这意味着,视图不知道有关演示程序的任何信息(它甚至不知道演示程序类的存在),它只知道接口,它公开视图E 221所需的调用。
这样,您就可以为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或其他类似的工具会得到更好的结果,但是这个版本也应该能工作。希望我能帮忙,如果你还有其他问题,请告诉我:)
https://stackoverflow.com/questions/49537488
复制相似问题