【问题标题】:Design pattern for shared overlay view共享覆盖视图的设计模式
【发布时间】:2015-03-16 22:18:12
【问题描述】:

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

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

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

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

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

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

我知道我可以让一个 Activity 超类在一个地方执行此操作,但这并不能消除不断添加/删除侦听器的潜在问题。有没有更好的标准方法?

谢谢!

【问题讨论】:

    标签: java android android-layout architecture


    【解决方案1】:

    标准模式是使用片段。

    【讨论】:

    • 我认为片段在不同活动之间共享时会出现添加/删除侦听器的相同问题,但也许我误解了..?
    【解决方案2】:

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

    因此,每个 Fragment 实例都需要添加侦听器才能侦听,例如来自服务的事件,不幸的是,您不能拥有跨多个活动的单个片段实例。如果我事先找到了这个帖子,我会明白的:Retain Fragment state between Activities

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 2019-09-10
      相关资源
      最近更新 更多