android - 适配器在 Mvp 模式中的作用?

标签 android mvp

您如何对待 MVP 模式中的适配器?例如,在这个项目中 https://github.com/msahakyan/nested-recycler-view 有一个 MovieAdapter, https://github.com/msahakyan/nested-recycler-view/blob/master/app/src/main/java/com/android/msahakyan/nestedrecycler/adapter/MovieAdapter.java这个人在这个适配器中有一个 recyclierview 作为项目,(如果你看他的项目,他在他的主屏幕中嵌套了 recyclierview。)因为他有这样一个项目,他做服务调用和其他通知,加载数据(从服务获取) 等在此适配器中的操作。(没有与相关 fragment/Activity 的通信)如您所见,此适配器有很多工作要做。如果你这样做,你将如何在 mvp 模式中实现它?具体来说,在这种情况下,您会在适配器中使用 Presenter 对象,还是使用 View 对象来进行调用、通知和加载?

最佳答案

Adapter 是纯 View 层。将所有交互(例如单击 RecyclerView ViewHolder 中的按钮)映射回 Activity/Fragment,然后将其转发给 Activity/Fragment 的演示者。

RecyclerView 有点棘手,因为 ViewHolder 可以在滚动等过程中回收。 通过回到“父”Activity/Fragment 和相应的 Presenter,更新 V​​iewHolder(即使用 DiffUtils 的动画)会更容易且更不容易出错。将 ViewHolder 只是作为显示数据对象的一种方式,但不要为每个 ViewHolder 添加 Presenter 以协调 ViewHolder。实际上,只需确保 ViewHolder 获取包含 ViewHolder 需要显示的所有信息的数据对象,但不要让该数据对象由 ViewHolders Presenter“控制”。否则,你最终会一团糟,因为一个 ViewHolder 被他的 Presenter 更新了,也许 ViewHolder 同时被回收了,也许屏幕方向发生了变化,或者也许“父”Activity/Fragment Presenter 更新了整个适配器数据集等 帮自己一个忙,只使用一个 Presenter 来“协调/控制”RecyclerView 应使用“父级”Activity/Fragment Presenter 显示的数据。

关于android - 适配器在 Mvp 模式中的作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908174/

相关文章:

android - android.graphics.Canvas类的原生实现源码

Android MVP模式包结构

两个 fragment 共享相同数据的 Android MVP

gwt - CachingActivityMapper 有什么意义?

design-patterns - MVP vs. Presentation Model,哪个更好?

android - 如何在 Android 应用程序中使用 xmlserializer 创建 xml

Android Studio - 如何在 webview Lollipop 中上传文件 (Android 5.0)

java - 错误 :warning: Ignoring InnerClasses attribute for an anonymous inner class Error:(org. jsonschema2pojo.gradle。)

android - OpenGL ES Tracer 不会在我的 Nexus 10 上收集任何数据

wpf - 如何将此 WPF 示例进一步解耦为 MVC、MVP 或 MVVM?