通过Android MVP中的构造函数将片段(View)Presenter传递给适配器

时间:2016-03-16 16:14:54

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

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

话虽如此,我目前正通过Adapter的构造函数将Presenter传递给RecyclerViewAdapter。这有风险吗?

我能看到的唯一风险是RecyclerViewAdapter比片段寿命更长,从而超过了演示者。但是,这不可能,因为Fragment拥有对Adapter和Presenter的私有引用,并且两者都会被同时销毁。

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

感谢您的想法!

1 个答案:

答案 0 :(得分:2)

  

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

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

  

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

没有。适配器只是一个对象,它没有自己的生命周期,如ActivityThread。如果活动被破坏 - >适配器被破坏。如果适配器被破坏 - >主持人被摧毁。这里没有泄漏,你很好。

  

这就是说,我想过只在构造函数中传递RecyclerViewAdapter所需的数据,但是我不确定如何在不引用Presenter的情况下更新数据?

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