2013-02-27 149 views
0

我有這樣的一段代碼...TextView.setText()不工作

class IncomingHandler extends Handler 
{ 
    @Override 
    public void handleMessage(Message message) 
    { 

     String totalReceived = (String) message.obj; 
     Log.i("TAG", "total received: " + totalReceived); 
     totalTextView.setText("" + totalReceived); 

     Log.i("TAG", (Looper.getMainLooper().getThread() == Thread.currentThread()) ? "UI thread" : "NOT UI thread"); 
     //Toast.makeText(MainActivity.this, "message received.", Toast.LENGTH_LONG).show(); 

    }; 
}; 

我跑我的應用程序,它工作得很好,但如果我通過改變設備的方向重新創建活動,例如,文字將不會更新。請注意,我確實收到這些消息,並且它們已成功通過LogCat打印。

另外請注意,在我最後的日誌中,我嘗試確定我是否在主線程上運行。如果該檢查是正確的,我確實在UI線程上運行...

任何想法,我可能做錯了什麼?

乾杯, 亞歷

+0

忘了提及當我重新創建活動時,我得到的文本是佈局中的默認文本... – 2013-02-27 16:33:48

+0

發佈您如何掛鉤/從處理程序中分離。 – dymmeh 2013-02-27 16:36:17

+0

原來你是對的。我通過處理程序的方式使差異。當我創建服務時,我正在通過它。現在我將它作爲replyTo參數傳遞給每一次我綁定並且它工作 – 2013-02-28 10:56:20

回答

0

皮棉建議的處理程序應該是靜態的,使處理器staic並創建一個weakReference的活動,然後通過活動引用訪問TextView的,我認爲它應該工作

0

嘗試保存實例 添加此

@Override 
protected void onSaveInstanceState(Bundle outState) { 
State s = new State(yourTextView.getText().toString()); 
outState.putSerializable(State.STATE, s); 
super.onSaveInstanceState(outState); 
} 
@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
super.onRestoreInstanceState(savedInstanceState); 
State s = (State) savedInstanceState.getSerializable(State.STATE); 
yourTextView.setText(s.getYourTextViewText()); 
} 
0

您的問題是totalTextView仍然是指向(現已被毀)以前的TextView的活動。

如果class IncomingHandler是一個子類活動的,它應該是一個容易的工作,以確保在onCreate()您確保如果處理程序是不是一個子類的活動與totalTextView = (TextView)findViewById(R.id.__/* something */__);

更新它,好吧,也許它應該是,或者你應該看看更多的Android框架高層次的東西來更新和回調活動(例如裝載機或無UI的片段與setRetainInstance(true);

ps .:一些用戶將告訴你只要覆蓋清單中的configChanged即可覆蓋該活動的銷燬。雖然它可能在第一時間起作用,但這是一個不好的快速解決方案,這是一個不可取的模式,通常會導致未來更大的問題。

來自:http://developer.android.com/guide/topics/manifest/activity-element.html#config

注:使用這​​個屬性應該避免只用作 最後手段。請閱讀處理運行時更改以獲取更多信息 關於如何正確處理由於配置更改而導致的重新啓動。

+0

作爲dophh評論我的帖子,重要的是你如何將處理程序傳遞給服務。我的猜測是我的服務知道一個處理程序,它不再與重新創建的活動有任何關係。 – 2013-02-28 10:57:14