如何为Android视图实现Decorator模式

时间:2014-11-06 08:26:03

标签: android design-patterns decorator android-custom-view

注意:实际问题位于What my questions are部分。提供其他部分是为了更好地概述问题。

TASK

我想使用Decorator design pattern修饰Android视图。对于我的问题,我将使用装饰ViewPager作为示例,但我相信解决方案将更加通用。

我为什么需要

我希望能够在我的不同解决方案中对标准视图重用不同的扩充。例如。现在我有定时器切换ViewPagerViewPager,当用户到达终点时通知我。有了这个解决方案,我的目标是在我的下一个解决方案中添加自动切换通知ViewPager(即将我当前的扩展名组合在一起)。装饰者模式正是为了这个。

我当前的方法

  • 我已将目标ViewPager包裹在ViewPagerDecorator
  • 我还完成了装饰器的所需扩展 - AutoSwitchViewPagerNotifyOutOfBoundsViewPager(基于this)。现在我甚至可以做到

    new AutoSwitchViewPager(new NotifyOutOfBoundsViewPager(viewPager))

  • 现在我想弄清楚如何在布局中放置这个运行时创建的视图。我目前正在试图弄清楚是否可以将普通的ViewPager替换为将其xml属性传播到装饰视图的布局。

我的问题是什么

  • 有没有办法将xml属性从布局定义的视图复制到运行时构造的(至少LayoutParameters
  • 另一种方法是使用ViewStub,但我没有找到一种方法来使用完全运行时构建的东西(不使用xml Layout)来膨胀ViewStub。有这样的方式吗?

我读了什么

我偶然发现了这些相关资源:

  • Decorating Android views - 这并不是完全装饰视图,因为装饰者不会订阅视图的不同事件。装饰需要通过特殊的触发方法触发。然而,我瞄准的装饰确实需要充当装饰类的完整扩展。
  • Decorator pattern Android - 此处通过特殊方法再次触发装饰
  • Decorating an Android activity - 我对ComonsWare的所有尊重,我离他的陈述很远。另一方面,我相信Android中的视图允许您比活动更多的运行时修改,所以我的情况仍然是合理的。

1 个答案:

答案 0 :(得分:6)

经过数周的努力并采用了一些不同的设计方法,我认为我终于得到了解决方案!由于解决方案不容易解释为适合SO帖子,我创建了一个blog post来解释我所有的挣扎。我还附带了我的源代码解释,以展示我的想法here