2015-03-13 71 views
0

我有工作代码,但我的解决方案看起来并不理想。我的问题是,如果存在这样的comon设计模式,我可以使用它。共享覆盖视图的设计模式

我有4个不同的活动,所有做音频播放。我有一个管理播放的公共类(Player),因此当活动想要播放时,它会调用Player的唯一实例。

无论哪Activity目前正在积极想显示与播放信息相同的重叠视图/控制等,这由我创造一个PlayerView.xml布局解决了我include每个Activity布局。

最后我有一个PlayerListener我在播放器上注册以接收播放通知。当PlayerListener收到通知时,它会修改当前活动的Activity中的PlayerView(例如,将播放曲目名称设置为TextView,PlayerView)。

为了使PlayerListener知道哪个Activity是当前激活它有一个方法setParent(ViewGroup parent)其无论是在创作和onResume每个Activity调用自己的布局父设置为监听器。 PlayerListener然后为PlayerView.xml中的每个组件(例如Button)添加监听器,并从之前的Activity中删除父监听器。

对我来说,我对活动之间的每次更改都必须添加/删除一堆听众,但(afaiu)因为每个include创建了引用布局的副本,这意味着PlayerView在布局中是唯一的包括我需要这样做(可能跳过听众的删除,但这可能会扩大到更多的活动时,可能会产生性能问题)。

我知道我可以在一个地方做一个Activity超类,但是这并没有消除不断增加/删除侦听器的潜在问题。有没有更好的,标准的做法?

谢谢!

回答

0

这是使用片段的标准模式。

+0

我认为片段会有相同的问题添加/删除监听器时,他们之间共享不同的活动,但也许我误解了..? – jola 2015-03-15 06:35:04

0

好吧,在阅读了更多关于碎片的内容之后,我现在认为我明白Android中没有任何常见模式可以达到目的。事实上,我可以将相同的片段添加到多个活动中,但是每个片段都会成为一个新实例,并且只存在于Activity的范围中,在片段之间传递状态信息就像是为Activities执行操作一样。

因此,每个Fragment实例需要添加侦听器,才能收听例如来自服务的事件,但不幸的是,您不能拥有一个存在于多个活动中的单个Fragment实例。我会理解,如果我已经发现这个线程预先:Retain Fragment state between Activities