传递碎片';通过Android MVP中的构造函数将s(视图)演示者转换为适配器

传递碎片';通过Android MVP中的构造函数将s(视图)演示者转换为适配器,android,android-fragments,android-adapter,android-recyclerview,mvp,Android,Android Fragments,Android Adapter,Android Recyclerview,Mvp,我有一个MVP片段(视图),它承载了一个RecycleView适配器(RecycleWebAdapter)的自定义实现。此适配器扩展了我的自定义RecycleServiceAdapterBase适配器。由于承载片段的演示者需要知道当前建模的数据,RecyclerView将使用的数据将作为演示者中的私有字段存储 话虽如此,我目前正在通过适配器的构造函数将Presenter传递给RecycleServiceAdapter。这有风险吗 我能看到的唯一风险是RecycleServiceAdapter超过

我有一个MVP片段(视图),它承载了一个RecycleView适配器(RecycleWebAdapter)的自定义实现。此适配器扩展了我的自定义RecycleServiceAdapterBase适配器。由于承载片段的演示者需要知道当前建模的数据,RecyclerView将使用的数据将作为演示者中的私有字段存储

话虽如此,我目前正在通过适配器的构造函数将Presenter传递给RecycleServiceAdapter。这有风险吗

我能看到的唯一风险是RecycleServiceAdapter超过片段,从而超过演示者。但是,这是不可能的,因为片段持有对适配器和演示者的私有引用,并且两者将同时被销毁

话虽如此,我只想将所需的数据传递给构造函数中的RecycleServiceAdapter,但我不确定如何在不引用演示者的情况下更新数据?(其中数据当前已建模。)

谢谢你的想法

承载片段的演示者需要知道当前建模的数据

您只需传递要呈现的数据,而不将其存储在演示者中

我目前正在通过适配器的构造函数将演示者传递给RecycleServiceAdapter。这有风险吗

不可以。适配器只是一个对象,它不像
活动
线程
那样有自己的生命周期。如果活动被销毁->适配器被销毁。如果适配器被销毁->演示者被销毁。这里没有漏洞,你很好

话虽如此,我只想将所需的数据传递给构造函数中的RecycleServiceAdapter,但我不确定如何在不引用演示者的情况下更新数据


取决于您使用演示者的频率。如果只需要绘制一次,则可以创建一个演示者,使用一次,从而避免引用演示者。但是,您有一个表示许多视图的适配器,因此,我非常确定您将绘制很多视图。因此,从适配器中保留对演示者的引用,这是绝对正确的。这里没有内存和性能问题。

您好,谢谢您的回答。一个问题:为什么不在演示者中对数据建模?这个模型是一个POJO,我不认为应该把它放在哪里,我应该澄清一下,我在演示者中保存了一个POJO接口的引用。为什么这个表格不好?谢谢。演示者应该在屏幕上“绘制”数据,它不应该包含任何内容。它通常是一次性操作,最常见的用例如下所示:
presenter.draw(数据)。不需要在内部存储数据,只需绘制一次即可完成。在我的项目中,我将数据保存在适配器或片段中,具体取决于用例。你有什么理由需要把它保存在演示者中吗?这种体系结构不应该引起任何严重的问题,但我认为它根本不是存储数据的正确位置。为了澄清,Presenter中没有存储数据,所有数据都存储在SQLite数据库中,我有一个DAO层。演示者持有对从DOA返回的列表的引用。我怀疑这可能会改变你的答案?另外,在android MVP中,我经常重复使用我的演示者,因为它会对用视图、模型更新等触摸事件做出反应。是的,现在它有了意义。如果你需要对触摸事件做出反应并重用你的演示者,我认为你做得很好。