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

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

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

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

话虽如此,我想过只在构造函数中传递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?

不.适配器只是一个对象,它没有像Activity或Thread那样的生命周期.如果活动被破坏 – >适配器被破坏.如果适配器被破坏 – >主持人被摧毁.这里没有泄漏,你很好.

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?

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

点赞