2011-02-28 104 views
0

我的Android應用程序出現了一個看似奇怪的問題。 無論我調用append還是setText,我的TextView都只會更新一次。TextView只更新一次

我有我的輸入法設置爲具有「發送」按鈕,監聽如下:

 sendText.setOnEditorActionListener(new OnEditorActionListener() { 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event){ 
      if(actionId == EditorInfo.IME_ACTION_SEND){ 
       try { 
        send(); 
        scroller.post(new Runnable() { 
         @Override 
         public void run() { 
          scroller.fullScroll(ScrollView.FOCUS_DOWN); 
         } 
        }); 
       } catch (Exception e) { 
        Log.e("chat", e.toString()); 
       } 
      } 
      return true; 
     } 
    }); 

的發送方法:

public void send(){ 
    final String message = sendText.getText().toString(); 
    final String ip = ipAddr.getText().toString(); 
    //rcvMsg.append("Me: " + message + "\n"); 
    runOnUiThread(new Runnable(){ 
     public void run(){ 
      TextView rcv = (TextView)findViewById(R.id.rcvMsg); 
      rcv.setText(rcv.getText()+"Me: "+message+"\n"); 
     } 
    }); 
} 

正如你所看到的,我想追加和下面的setText在runOnUiThread中。這兩個只在第一次調用send()時更新textView。在隨後的通話中,它不會改變。

但是!

如果我把應用程序放在後臺(打回家),然後重新啓動它,那麼TextView將包含所有正確的文本。

我錯過了什麼?

+0

我試過rcvMsg.invalidate(),但是這並沒有改變任何東西。 – jhirsch 2011-02-28 06:41:54

回答

1

我想通了 - 這是一個GUI的問題..

我不小心設置的TextView(滾動型內)的高度的精確值。顯然,這導致fullScroll方法搞砸了,而不是完全向下滾動,所以添加的文本是不可見的。將TextView的高度設置爲wrap_content解決了問題。

0

在您的活動將下面的代碼行setContentView後從發送方法去除

TextView rcv = (TextView)findViewById(R.id.rcvMsg); 

改變這一行rcv.setText(rcv.getText()+"Me: "+message+"\n");

rcv.setText(rcv.getText().toString()+"Me: "+message+"\n"); 

在發送方法

+0

沒有運氣。仍然有同樣的問題。 – jhirsch 2011-02-28 06:41:16

+0

我已編輯我的答案檢查出 – ingsaurabh 2011-02-28 06:43:06

+0

沒有。 TextView仍然不會更新,直到我退出並重新加載應用程序。 – jhirsch 2011-02-28 06:44:59

0

你不應該把

TextView rcv = (TextView)findViewById(R.id.rcvMsg); 
rcv.setText(rcv.getText()+"Me: "+message+"\n"); 

在可運行。你的代碼應該看起來更像這樣。

public void send(){ 

    TextView rcv = (TextView)findViewById(R.id.rcvMsg); 
    rcv.setText(rcv.getText()+"Me: "+sendText.getText().toString()+"\n"); 

} 

如果您使用的是IP變量不知爲何,你會做一個可運行的裏面發送該消息,但設置一個可運行的內textarea的是無法看到,因爲兩者是單獨的線程上運行。

+0

沒有做。將發送消息更改爲這兩行無濟於事。直到我退出並重新加載應用程序之前,TextView仍然不會更新。 – jhirsch 2011-02-28 06:49:13

+0

嘗試在設置它之前和之後記錄TextView。 Log.d(「before」,rcv.getText());並看看日誌貓是否會看到變化。如果log cat沒有選擇它,那麼你的TextView.setText就會在你的UI的獨立線程中運行。 – david 2011-02-28 06:52:58