2012-11-16 31 views
1

我目前正在開發一個Android應用程序作爲一個直升機的遙測應用程序。 我有一個udp服務器,通過網絡發送數據。Android與Oberserver模式 - 如何初始化活動?

有一個udp客戶端在一個單獨的線程來處理網絡連接。 在我ConnectActivity我加入我的觀察是這樣的:

Observer dataView = new DataViewActivity(); 
Observer osmDroidView = new OSMDroidMapsActivity(); 

udpClient.getDataNotifier().addObserver(dataView); 
udpClient.getDataNotifier().addObserver(osmDroidView); 

在我OptionsMenu我就比如我DataViewActivity:

MenuItem dataItem = menu.add("Data"); 
dataItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

的DataViewActivity實現Observer接口。 現在我的問題是,我添加到我的觀察員列表中的dataview實例是另一個實例,而不是我的數據視圖,我通過點擊我的選項菜單開始。 任何想法如何通過選項菜單啓動相同的實例?

startActivity(new Intent(getApplicationContext(), 
       DataViewActivity.class)); 
+0

你需要做一些像'udpClient.getDataNotifier()。addObserver(this);'在新創建的Activity中。您在啓動時無法獲得對「Activity」的引用,因爲它尚不存在。並且不要嘗試自己創建一個「Activity」實例。這應該由系統完成。 – zapl

回答

1

你根本不應該使用任何種類的new Activity()。無論你使用什麼,你都應該通過執行startActivity調用來啓動你的Activity。你的curernt Activity應該實現Observer接口,並在得到通知時啓動新的Activity。你不能創建/存儲活動 - 這是框架作業

+1

我解決了這個問題。我的UDPClient現在通過Singleton模式實現。現在我可以通過getInstance()方法訪問所有活動。 UDPClient.getInstance()getDataNotifier()的addObserver(本)。; – user1830608