2013-10-08 49 views
3

這是一個比實際的「如何完成」的風格問題,但基本情況是這樣的:我有一個活動MyActivity其中包含一個MapFragment以及一個ListRenderers這是我自己的類,負責顯示一些數據。 Renderers也有ViewPagers從另一個班級獲得內容視圖,我們稱之爲ViewPagerTab。有時候,這些ViewPagerTabs中的一些發生了一些情況,這些需要更新頂層Activity中的地圖。如我所見,有幾種方法:訪問父母的最佳方式活動數據

1)我的Renderers和我的ViewPagerTabs都包含對上下文的引用。如果我將上下文作爲MyActivity進行投放,則可以訪問其地圖參數。

2)通過使用對上下文的引用,我可以調用getSupportFragmentManager().findFragmentById(R.id.map)).getMap()並以此方式獲取地圖。

3)我可以將地圖從Activity下移到RenderersViewPagerTabs,因爲它們是在創建地圖時可以作爲類變量訪問的。

4)在我的Activity中使用BroadcastReceiver,並在地圖需要更新時從我​​的ViewPagerTab發送消息給它。

我錯過了什麼嗎?做這件事最好/最乾淨的方式是什麼?

回答

4

這節課可以給你一些想法: Communicating with other Fragments 基本上,這個想法是在子單元(如Fragment)中定義一個接口,然後在父Activity中實現它。然後,實際上在Fragment的界面中調用的方法。

+0

這是非常簡單和有用的 - 我很驚訝,我錯過了它。謝謝! – Catherine

1

另一種替代方法是創建一個類extends Application。在那裏,你可以「共享和聲明」一些非上下文特定的變量(比如榮耀的容器,但不需要創建多個實例或查找)。

需要在一些設置你的清單,但隨後所有的活動可以調用MyApp app = (MyApp) this.getApplication();(或片段,通過onAttach活動的.getApplication()

0

標準的方法是定義一個監聽器接口,但我發現這很麻煩。 Otto是一個非常不錯的選擇,你至少應該在作出決定之前進行調查。

0

我認爲這有點凌駕於我的頭上,但包裹怎麼樣。我認爲它不會工作,因爲您的數據的動態性質,但它是活動之間溝通的一種方式。

相關問題