我有一个场景,我有一个活动和4个片段,从一个片段我使用接口传递数据到主要活动,我正在接收值或说对象,现在我需要做什么,我必须将同一个对象传递给所有其他片段。但我不想使用捆绑或静态方法/字段,我只是想知道这个问题的最佳想法或方法,我能做什么?
我正在考虑使用抽象类的一个解决方案,假设我的抽象类名是ParentFragmentAbstarct应该实现Fragment类并在其中定义一个抽象方法,比如setData(),然后每个Fragment应该扩展这个Fragment类然后抽象方法被覆盖在每个片段中,现在我迷失了,如果我只从片段之一获取值,如何设置其中的值(让我们说从网络响应我现在收到片段2中的数据n现在如何设置此其他三个片段中的值相同)
答案 0 :(得分:0)
将抽象类与片段对象数组一起使用:
与ViewPager一样,您有一个适配器来保存这些片段的实例。当您的一个片段使用接口向MainActivity通知新数据时,您可以简单地迭代ViewPagerAdapter并调用您的抽象方法。所有碎片都会收到通知。
使用广播接收器
您可以声明自己的广播接收器并制作片段以收听这些广播。当数据准备就绪时,您的片段可以发送广播,然后所有正在收听此特定广播的片段都可以更新其状态。请检查此one
使用Observable RxJava
在ReactiveX中,观察者订阅了一个Observable。然后 观察者对Observable的任何项目或项目序列作出反应 发射。此模式有助于并发操作,因为它确实如此 在等待Observable发出对象时不需要阻塞, 但相反,它以观察者的形式创造了一个哨兵 随时准备对Observable进行适当的反应 这样做。
使用EventBus
EventBus是Android和Java的发布/订阅事件总线。
这是一个很棒的library,占地面积非常小,可以轻松完成工作
答案 1 :(得分:0)
您可以创建一个单例数据管理器类,并让所有片段订阅它并监听数据更改。接收状态变化时,每个片段都可以拥有自己的实现。
在此管理器类中进行任何数据库调用,并在响应回调
上将数据分发给侦听器