2010-09-03 38 views
3

我必須錯過這個完全愚蠢的東西,因爲更新TextView應該是一件容易的事。我有一個Activity類,它是另一個接收消息的觀察者。在我的Activity的onCreate中,我做了以下工作,它工作正常。Android TextView文本在運行時不會更新

theStatus = (TextView) findViewById(R.id.theStatus); 
theStatus.setText("waiting"); 

當消息活動收到它交給其關閉,以它的觀察者(我的活動)的新消息

public void statusUpdate(GenericMessage aMessage) 
{ 
    String statusText = aMessage.getDetails(); 
    theStatus.setText(statusText); 

    theSessionStatus.invalidate(); // I've tried with and without this call 
} 

但是屏幕沒有更新版本。我必須俯視...

+0

你檢查了錯誤嗎? – Asahi 2010-09-03 19:57:48

+0

你確定'statusUpdate()'甚至被調用嗎? – CommonsWare 2010-09-03 20:27:14

+0

我確定正在調用statusUpdate。我正在使用調試器並捕獲我在那裏設置的斷點。我現在意識到的一個細節可能會影響我,因爲這個活動並不是該應用的主要活動。短故事是主應用程序啓動並等待用戶點擊按鈕啓動。一旦啓動,它啓動消息線程並根據消息決定向用戶顯示哪些活動。它通過調用startActivityForResult來啓動此Activity,然後Activity將自己註冊爲消息線程的觀察者。 – bursk 2010-09-03 20:34:53

回答

0

它看起來像我找到了一個解決方案,雖然它感覺像一個黑客攻擊。我從你上面的評論和here得到了這個想法。

我現在用的是處理程序,通知消息來了,因爲它是感興趣的活動B B創建它的onCreate處理程序:

Handler statusHandler = new Handler(); 
    statusHandler.post(new Runnable() 
    { 
     public void run() 
     { 
     statusUpdate(); 
     } 
    }); 

我更新了消息接收C類( B正試圖成爲觀察者)在B向其註冊時接收句柄。然後,在C,我撥打下列適用的消息到來時:

theMsgObserverHandle.post(new Runnable() 
{ 
    public void run() 
    { 
     Log.d(myName, "Calling my Observer statusUpdate"); 

     theMsgObserver.statusUpdate(); 
    } 
}); 

我不喜歡的是,現在我不能只是通過我的消息,直接B點。 (我的消息類是我自己定義的類而不是android.os.Message)現在在B我需要問消息的C(C是一個單例)的實例。但至少我正在向前邁進。如果任何人有更好的實施,我真的很感激反饋。

+0

奇怪的是,在進一步閱讀,似乎我不應該調用我的onCreate中的第一個statusHandler.post,但如果我把它取出,而statusUpdate被調用,不再引發異常setText不起作用。 – bursk 2010-09-04 15:37:15