android - 在 Android MVP 中通过构造函数将 Fragment 的(View)Presenter 传递给 Adapter

标签 android android-fragments android-adapter android-recyclerview mvp

我有一个 MVP fragment ( View ),它托管 RecyclerView 适配器 (RecyclerViewAdapter) 的自定义实现。此适配器扩展了我的自定义 RecyclerViewAdapterBase 适配器。由于托管 Fragment 的 Presenter 需要知道当前建模的数据是什么,因此 RecyclerView 将使用的数据作为私有(private)字段存储在 Presenter 中。

也就是说,我目前正在通过 Adapter 的构造函数将 Presenter 传递给 RecyclerViewAdapter。这有风险吗?

我能看到的唯一风险是 RecyclerViewAdapter 比 Fragment 长,因此比 Presenter 长。然而,这是不可能的,因为 Fragment 持有对 Adapter 和 Presenter 的私有(private)引用,并且两者将同时被销毁。

话虽这么说,我想过只将所需的数据传递给构造函数中的 RecyclerViewAdapter,但是我不确定如何在不引用 Presenter 的情况下更新数据? (数据当前建模的位置。)

谢谢你的想法!

最佳答案

Presenter hosting the Fragment needs to know what data is currently modelled

您只需传递要呈现的数据,不要将其存储在呈现器中。

I am currently passing the Presenter to the RecyclerViewAdapter through the Adapter's constructor. Is this a risk?

没有。 Adapter 只是一个对象,它不像 ActivityThread 那样有自己的生命周期。如果 Activity 被销毁 -> 适配器被销毁。如果适配器被销毁 -> 演示器被销毁。这里没有泄漏,你很好。

This being said, I've thought of only passing the data required to the RecyclerViewAdapter in the constructor, but then I am not certain how to update the data without a reference to the Presenter?

取决于您使用演示器的频率。如果你只需要绘制一次,那么你可以创建一个演示者,使用它一次,从而避免对演示者的引用。但是,你有一个代表许多 View 的适配器,所以,我很确定你会画很多东西。因此,请从您的适配器中保留对演示者的引用,这绝对没问题。这里没有内存和性能问题。

关于android - 在 Android MVP 中通过构造函数将 Fragment 的(View)Presenter 传递给 Adapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36041198/

相关文章:

android - 简单的 TextView.setText 导致 40% 的 CPU 使用率

java - Android NDK 库仅在运行时不加载三星 galaxy 4.0.2 手机

android - 如何使用 Espresso 从重复使用的 Fragment 中的多个相同 id 中获取 EditText View ?

android - 单击 ListView 上的删除按钮后删除 ListView 上的项目

android - 在不同市场上发布 Android 应用程序

android - 以编程方式选择时,CheckedTextView 不绘制复选标记

android - fragment 必须是公共(public)静态类才能从实例状态正确地重新创建

java - 如何处理android中 ListView 项中的复选框事件

android - 自定义列表项不响应选择器中的 state_checked

android - 我的 ionic 应用程序在安装时要求太多权限