MVP和多种行为

问题描述:

我一直在试图做一个简单的记事本应用程序(我的第一个应用程序),使用MVPdagger。 我已经理解了大部分内容,但如果我有多种行为,我会有点失落。我会解释。
我的项目层次结构是这样的: Click hereMVP和多种行为

  • MainActivity - Activity类,拥有一个ListView。
  • MainPresenter - 接口,保持设置容器的方法,和刷新一个
  • MainPresenterImpl - 演示
  • 的MainView执行 - 接口,用于在MainActivity(为MVP)
  • Note_Container - 包含NoteHandler加载 - 保存笔记,创建/存储适配器,可进行更改
  • 忽略noteactivity其空
  • 迪的文件夹是依赖注入
  • 车型只有把两个STR记类012
  • NoteHandler - 包含NoteRepository并在抛出异常时处理异常。
  • NoteRepository - 使用gson库保存和加载文件中的注释。

解释了所有这些之后,您应该(可能)已经理解了项目是如何工作的(随意批评层次结构)。
现在我想添加一个创建笔记的按钮。我只是将听众添加到mainactivity并将其重定向到演示者...
但是,演示者是否会处理代码以添加新音符(开始新的意图等)还是应该创建一个新类独立处理这些东西?
如果我想在将来添加更多的按钮,例如remove-all-notes或启动帮助对话框,我应该为每个按钮设置一个处理代码的类吗?
我该如何组织这样的事情?

+0

好的设置。一个好方法是让演示者委派大部分任务。 onXXClicked在演示者调用视图,控制器或其他类的东西。在这种情况下,在其他地方导航您的应用程序的视图。我会避免在您的演示者中引用上下文(附图中的appart)。 – Frank

导航没有在MVP模式中正式解决。那么,我认为有两个好方法:

1 - 您可以创建一个导航器/路由器来为您处理导航。因此,演示者将所有这些逻辑提供给导航器或...

2 - 您可以处理活动中的屏幕更改。我真的相信屏幕变化是View的责任,所以你只需要将导航命令传递给View。像:

interface MainView{ 
    void navigateToAddCardScreen() 
    void navigateToLoginScreen() 
    void navigateSomeScreen() 
} 

我更喜欢第二个选项。导航器使得代码对我来说太粒...

我希望我能帮到

+0

除了导航之外,从列表中打开已存在的笔记还需要与笔记本电脑(存在于演示者中)进行通信并获取笔记......如何在演示者没有“Android代码”的情况下工作? ? –

+0

您将点击传递给演示者,演示者与Handler交流。然后它将结果传递给View –