问题标签 [android-mvp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 在带有 RxJava 的 android 上使用干净的 MVP:如何在仍然观察 UI 线程的同时让演示者不了解任何 android 知识?
为了使用 mvp 模式在 android 上实现“干净”架构,建议将 android 框架视为插件,并且不要将任何 android 感知依赖项泄漏到 Presenter 层。使用 rxjava,如果我有一个设计为将数据“推送”到视图层的演示器,我可能想要这样的逻辑:
但是,通过观察“AndroidSchedulers.mainThread()”,这会强制依赖:
在这一点上,我的演示者现在知道了 android 并与之绑定;我想避免。
处理此问题的建议方法是什么,以便保证将结果传递到 android 的 UI(主)线程上的 ViewLayer,而演示者不依赖于任何与 android 相关的东西?
android - 如何在 Android MVP 架构中分离 Service 和 Activity?
我正在开发 Android 音乐播放器。我使用Service播放歌曲,使用SQLite 数据库存储歌曲,使用ContentProvider访问 sqlite 数据库。我很困惑,如何保持服务和活动之间的联系?我应该在演示者和服务之间实现连接吗?当我计划将我的服务视为模型时,最好和最简单的方法是什么?
android - 从 Activity 调用 Fragments 演示者的方法 [Dagger 2 + MVP]
我有 2 个不同的片段,它们都将被 2 个不同的活动使用。在这两个活动的布局中,都有一个框架布局用作片段容器。
哪个是;
片段:MapFragment、ListFragment
活动:HomeActivity、SearchActivity。
让我们谈谈 HomeActivity;
HomeActivity 将在 Activity 的 onCreate 上注入 ListFragment 和 MapFragment 并将注入的 Fragment 推送到其布局(首先是列表 Fragment),然后,Activity 将调用注入的 Fragment 的 Presenter 方法以在列表或地图上显示服务结果。
代码;片段侧;
_
ListFrgPresenter:
挑战列表片段:
活动方面:
家庭活动组件:
家庭活动模块;
家庭活动:
更新:问题是;我需要在 initComponent 方法的 HomeActivity 中注入challengeListFragment,还需要将challengeListFragment 对象作为参数提供给ChallengeListFrgModule。我认为这里发生了问题。在完成注入 ChallengeListFragment 对象之前,ChallengeListFrgModule 构造函数被触发。我该如何解决
android - 如何在不破坏 Presenter 的情况下将 SQLite 光标从 MVP 模型传递到视图?
我有一个使用 MVP 设计的应用程序实现,我想使用 SQLlite 数据库将数据数据源到 UI View
。我不想/不需要使用 a ContentProvider
,因为只有我的应用程序才需要数据。
我知道View
应该是“愚蠢的”,任何“业务”逻辑都应该放在Presenter
和Model
. 然而Presenter
,为了允许独立的单元测试,应该不包含 Android 代码。
那么我如何执行 SQLite 数据从Model
后面到的传输,Presenter
然后View
如果我不能在中使用 acursor
呢Presenter
?
我可以使用回调,但创建自己的数据结构、将数据加载到其中然后在回调中传递列表的“正确”方式是什么?
我想忠于MVP
设计。我已经在谷歌上搜索到了这个,虽然有很多东西可以处理Context
,Presenter
但使用其他 Android 数据结构的内容并不多。
java - 从交互器传递字符串资源以在 android MVP 中查看
所以,我目前正在尝试在我不熟悉的 android 中实现 MVP 方法。现在,它声明presenter 和interactor 类都不应该有关于android 类或组件的知识。
将业务逻辑与框架分离是有意义的。目前很好。
但是,我有一个演示者,它实现了一个回调以登录交互器,它传递了一个字符串资源 ID。演示者将字符串 res id 传递给以某种形式(无论是 toast 还是对话框)显示错误消息的视图。
交互者:
主持人:
活动视图:
然而,由于 R 文件是 android 框架的一部分,这使得演示者和交互器无法在纯 Java 应用程序中使用。
我在各种论坛上浏览了很多文章和讨论,这些论坛提供了实现这一目标的各种方法。
解决方案:
视图应该使用类似 showLoginError() 的方法,并自行决定如何处理视图逻辑。通过这种方式,演示者不了解与 android 相关的内容。
- 但是,来自交互器的字符串操作是不可能的。
在视图中创建处理所有情况的特定方法,例如 showinvalidEmail()、showinvalidPassword() 等。
- 方法太多,在复杂的情况下很难。
使用枚举作为错误类型并传递给视图 view.showError(ErrorTypes.INVALID_EMAIL) -仍然对#enumsmatter 感到困惑:)
https://www.reddit.com/r/androiddev/comments/4v4urs/mvp_question_how_do_you_populate_your_textviews/
- 使用提供所需字符串的资源抽象或包装类。
- 当有大量的字符串要使用时很困难。
https://medium.com/@daptronic/android-mvp-the-curious-case-of-resources-ddca39c1fccd
- 使用为 strings.xml 中的每个字符串提供 api 实现的库
- 仍处于测试阶段
https://github.com/Comcast/resourceprovider
请建议什么是实现这一目标的最佳方法,以免违反 mvp 或干净架构的原则。
android - 实现MVP设计模式的正确标准是什么
在android应用程序开发中实现MVP设计模式的正确标准是什么。举个恰当的例子。
android - Android MVP - 分离视图(onPause VS onDestroy)和状态保存
我正在尝试在我的应用程序中实现 MVP 架构。
但是,在阅读了一些博客并查看了一些示例项目示例之后,我不确定我是否完全理解分离视图的正确位置,以及在异步操作后第二次附加视图后应该做什么。
我看到的大多数示例,都只是在异步调用之后用视图的 null 验证检查来总结。
我将尝试通过一个示例来说明我的观点 - 通过电话号码登录/注册(主要思想是重要的事情,而不是示例本身)
有一个显示片段的活动 - LoginFragment。
用户输入他的电话号码并尝试登录。
如果用户退出 - 他应该被导航到另一个活动(在输入短信接收到的代码之后..)
如果用户没有退出,他应该被导航到注册过程 - RegistrationFragment。
如果出现错误,应该会出现一个带有错误消息的对话框ErrorDialogFragment。
现在,在一个快乐的流程中,用户按下登录按钮并等待该过程完成,一切都很好。
但是,在一个不太愉快的流程中(不是那么频繁,但绝对不能被忽略),用户按下登录按钮,然后按下主页按钮或者接听电话。
在场景1中,我们在 onCreate/onDestroy 中附加/分离视图,一旦异步登录操作完成,我们应该替换为RegistrationFragment或显示ErrorDialogFragment,我们有可能会遇到著名的 IllegalStateException:
getting exception "IllegalStateException: Can not在 onSaveInstanceState 之后执行此操作”
在场景2中,我们在 onResume/onPause 中附加/分离视图,一旦异步登录操作完成,我们将无法替换片段或显示对话框,因为视图已经分离。
在这种情况下,我不确定什么是正确的做法。
我们是否应该使用场景 1 并使用commitallowingstateloss提交事务?
恐怕这是个坏主意。
或者我们应该使用场景 2。在这种情况下,我们应该在再次附加视图时采取相应的行动,这意味着在 Presenter/Interactor 中保存状态(RegistrationRequied、ErrorHasOccured、LoginProcessStillRunning 等)。
有人可以对此有所了解吗?
提前致谢!
java - MVP模式下的比较逻辑可以保留在Activity中吗
我是 Android 新手,正在尝试学习 MVP 模式。我写了下面的示例教程,它从 EditText 获取用户名和密码,看看它是否匹配“Don”和“Bradman”。如果是,它将相应地显示 Toast 消息。我的问题是
“可以从 Activity 中的 Edit Text 获取值并在那里进行比较吗?我不这么认为,因为业务逻辑进入 Activity,这不是正确的做法。如果是,那么我怎样才能获得这些编辑文本值Presenter 类并在那里匹配并向 Activity 发送消息以显示 Toast。下面是我的代码,如果有人可以帮助“:
主界面.java
PresenterClass.java
MainActivity.java
android - Android 中的 MVP - 在哪里放置 Google API 调用以获取位置服务?
我正在开发我的第一个 android 应用程序,由于我的代码很快变得一团糟,我决定遵循 MVP 模式。
我的应用程序分为视图(片段)、演示者和合同(与视图及其演示者将用于通信的方法的接口)。
我的问题是我有一个包含用户位置字段的表单,我使用 Google 位置 API 检索该字段。我有一个 LocationHelper 类,它负责检查/询问权限、构建 google API 客户端、获取位置等。
但是,我不知道将使用此类的代码放在哪里:我的第一种方法是在演示器中实例化它,因为它比 UI 内容更多的是业务逻辑,但是许多方法需要调用者活动作为参数。例如构建 Google API 客户端:
或位置设置请求:
但是,根据我在 MVP 中的理解,演示者应该没有上下文/android 代码。在这种情况下,最佳做法是什么?
java - 如何在android中为不同的视图和演示者使用一个模型?
我尝试用设计模式学习编程。目前,我尝试使用模型-视图-演示者模式构建一个 android-app,但我遇到了一些问题,当我有不同的视图和演示者时,如何设计类,它们使用相同的模型。
就我而言,我有 view1 和 Presenter1,它们管理用户输入。此输入进入模型并将保存在那里。
然后我有 view2 和 Presenter2,它们应该从模型中获取用户输入并显示它。
当我有 1-1-1(view1-presenter1-model1)时,我想出了如何结合一切(与接口等)。但是当我有多个视图和演示者时,我不知道如何管理一切,它们与同一个模型进行通信。
MainActivity 代表我示例中的第一个视图:
}
这将是第一个视图的演示者:
}
这将是模型:
}
这将是第二个视图:
}
最后,这将是第二个视图的演示者。这里我不知道如何引用模型来获取数据,这是我从第一个视图传递的:
}