2011-11-21 121 views
1

我正在嘗試將事件從一個Java類發送到Activity。如何將事件發送到其他課程的活動?

場景是,本地會有一些數據,本機會調用java代碼中的回調函數,這個類處理數據,處理後我需要更新UI。我想在活動處理程序中的一個地方更新UI。 (不想在任何地方使用runOnUiThread())。

我無法使用以下方法正確發送事件。
第一種方法:
1)定義將消息發佈到隊列中並調用這些函數的函數。 2)爲了調用上述函數(第1點),我們需要上下文,如果我維護用於維護上下文並返回它的靜態變量,如果活動創建兩次,我們將無法獲得第一個活動的寫入上下文。

public class Activity1 { 
    protected static Context myContext = null; 
    protected Handler myHandler = null; 

    @override 
    public void onCreate() { 
     myContext = this; 
     myHandler = new Handler(); 
    } 

    public static Context getMyContext() { 
     return myContext; 
    } 

    public void postEvent1() { 
     myHandler.sendMessage(); 
    } 
} 

第二個方法:
1)使處理器作爲一個靜態變量和靜態函數的幫助返回這一點。 - 暴露內部變量不是一個好的設計。
2)當第二個活動創建時,缺點就像上面那樣。

public class Activity1 { 
    protected static Handler myHandler = null; 

    @override 
    public void onCreate() { 
     myHandler = new Handler(); 
    } 

    public static Context getMyHandler() { 
     return myHandler; 
    } 
} 

是否可以在不使用靜態變量和靜態函數的情況下獲取活動上下文?

如果有人知道,請分享知識。 :)

感謝&問候,
SSuman185

+0

糾正我如果我錯了。是不是你的活動必須擴展「活動」類? – 2011-11-21 12:42:09

+0

爲什麼不能將Context和Handler對象從活動傳遞到類中,例如在構造函數中? – Maep

+0

@莫漢 - 是活動需要延長。 – Suman

回答

0

我用一個容器類HashMap的用於存儲上下文和關鍵。

我用這個類的名字作爲關鍵字。

當第二個活動試圖向包含散列映射的類進行註冊時,它將回復已存儲活動的上下文(如果沒有,則返回null)。

所以像這樣,我能夠存儲類的上下文,並避免丟失第一個活動上下文,如果我創建第二個。

如果有更好的解決方案,請添加。

相關問題