Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 共享覆盖视图的设计模式_Java_Android_Android Layout_Architecture - Fatal编程技术网

Java 共享覆盖视图的设计模式

Java 共享覆盖视图的设计模式,java,android,android-layout,architecture,Java,Android,Android Layout,Architecture,我有工作代码,但我的解决方案似乎不是最优的。我的问题是,是否存在一个我可以使用的comon设计模式 我有4个不同的活动都做音频播放。我有一个公共类(Player)来管理播放,因此当某个活动想要播放时,它会调用Player的唯一实例 无论哪个活动当前处于活动状态,我都希望使用播放信息/控件等显示相同的覆盖视图。我通过创建一个PlayerView.xml布局来解决这个问题,我在每个活动布局中都包含该布局 最后,我在播放器上注册了一个PlayerListener,以接收播放通知。当PlayerList

我有工作代码,但我的解决方案似乎不是最优的。我的问题是,是否存在一个我可以使用的comon设计模式

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

无论哪个
活动
当前处于活动状态,我都希望使用播放信息/控件等显示相同的覆盖视图。我通过创建一个PlayerView.xml布局来解决这个问题,我
在每个
活动
布局中都包含该布局

最后,我在播放器上注册了一个
PlayerListener
,以接收播放通知。当
PlayerListener
收到通知时,它会在当前活动的
活动中修改
PlayerView
(例如在
PlayerView
中的
文本视图中设置播放曲目名)

为了让
PlayerListener
知道当前活动的
Activity
,它有一个方法
setParent(ViewGroup parent)
,每个
Activity
在创建时和
onResume
中调用该方法,将自己的布局父对象设置到侦听器。然后,
PlayerListener
为PlayerView.xml中的每个组件(例如按钮)添加侦听器,并从先前的
活动中删除父级的侦听器

对我来说,对于活动之间的每次更改,我都必须添加/删除一组侦听器,这似乎效率低下,但是(afaiu),因为每个
include
都会创建引用布局的副本,这意味着
PlayerView
在所包含的布局中是唯一的,所以我需要这样做(可能会跳过侦听器的删除,但在扩展到更多活动时可能会产生性能问题)

我知道我可以让一个活动超类在一个地方做这件事,但这并不能消除不断添加/删除侦听器的潜在问题。有更好的标准方法吗


谢谢!

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

好的,在阅读了更多关于片段的内容后,我现在想我明白了,在Android中,我尝试实现的东西没有任何通用模式。事实上,我可以将相同的片段添加到多个活动中,但每个片段都会成为一个新实例,并且只存在于活动的范围内y、 在片段之间传递状态信息就像为活动传递状态信息一样


因此,如果每个片段实例要侦听服务中的事件,则需要添加侦听器。不幸的是,您不能有一个跨多个活动的片段实例。如果我在前面找到此线程,我会理解这一点:

我以为片段也会有添加/删除侦听器的问题当他们在不同的活动中分享时,我会感到惊讶,但也许我误解了。。?