2015-03-13 76 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