2014-11-06 63 views
4

注意:實際問題位於What my questions are部分。其他部分用於更好地概述問題。如何爲Android視圖實現裝飾模式

TASK

我想用Decorator design pattern裝飾Android的看法。對於我的問題,我將以裝飾ViewPager爲例,但我相信這個解決方案將更加通用。

爲什麼需要IT

我希望能在我的不同解決方案的標準視圖重用不同的擴充。例如。現在我有定時器切換ViewPagerViewPager,當用戶到達終點時通知我。有了這個解決方案,我的目標是在我的下一個解決方案中添加自動切換通知ViewPager(即結合我的當前擴展)。裝飾模式正是爲了這一點。

正是我現在的做法是

  • 我已經在ViewPagerDecorator
  • 包裹目標ViewPager我也做了裝飾的需要的擴展 - AutoSwitchViewPagerNotifyOutOfBoundsViewPager(基於this)。現在我甚至可以做

    new AutoSwitchViewPager(new NotifyOutOfBoundsViewPager(viewPager))

  • 現在我想弄清楚如何將這個運行時創建的視圖放置在佈局中。我目前正試圖弄清楚,如果我可以從佈局將其xml屬性傳播到裝飾視圖中替換普通的ViewPager

WHAT我的問題是

  • 有一種方法在XML複製從佈局定義視圖屬性運行時構建一個(LayoutParameters至少)
  • 一種替代將使用ViewStub,但我沒有找到一種方式來充滿ViewStub完全運行時構造(不使用xml佈局)的東西。有沒有這樣的方式?

有什麼我讀

我已經對這些相關資源跌跌撞撞:

  • Decorating Android views - 這不完全是裝飾在這個意義上的裝飾不會訂閱意見到視圖的不同事件。裝飾需要通過特殊的觸發方法來觸發。然而,我所要的裝飾品確實需要充當裝飾類的完整延伸。
  • Decorator pattern Android - 這裏的裝飾再次通過特殊的方法
  • Decorating an Android activity觸發 - 所有我有ComonsWare尊重我很遠離質疑他的說法。另一方面,我相信Android中的視圖允許您對活動進行更多的運行時修改,所以我仍然認爲我的看法是合理的。
+2

讀約LayoutImflater.setFactory/LayoutImflater.setFactory2 – pskink 2014-11-06 08:35:58

+0

LayoutInflater.Factory2是更好,因爲它提供了額外的'查看parent'參數,但它需要API 11+ – pskink 2014-11-06 10:22:08

+0

只是忘了補充一點,在你的活動實施LayoutInflater.Factory2時,請確保您致電超級實施 – pskink 2014-11-06 17:11:32

回答

4

經過數週的努力和應用幾種不同的設計方法,我認爲我終於得到了解決方案!由於該解決方案不太容易解釋爲適合SO帖子,我創建了一個blog post來解釋我所有的掙扎。我還陪同我的解釋與源代碼來展示我的想法可用here

+1

兩年後您的解決方案在Material Design的ViewPager中仍然是最新的嗎? – 2016-03-15 13:25:28

+1

@IgorGanapolsky如果您問我在我提供的源代碼中是否包含'ViewPager'的新概念 - 我相信它不是。然而,這個問題和答案的目的是提出一個相當普遍的方法,而不是特定的'ViewPager'綁定解決方案,儘管後者被用作POC。 – 2016-03-15 14:41:15

+2

hi @BorisStrandjev嗨@BorisStrandjev我知道這是一個古老的問題,你可能已經開始了,但我偶然發現了你的問題,並且想表明我的團隊開發了一個基於註釋的java代碼生成庫,以刪除應用裝飾者模式。如果你有興趣,你應該檢查出來https://github.com/eyeem/decorator – Budius 2016-04-05 16:10:26