私のAndroidアプリで一見奇妙な問題が発生しています。appendまたはsetTextのどちらを呼び出しても、TextViewは1回だけ更新されます。
IMEに、次のようにリッスンする[送信]ボタンを設定しました。
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;
}
});
sendメソッド:
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");
}
});
}
ご覧のとおり、runOnUiThreadでappendとsetTextを試してみました。これらは両方とも、send()が最初に呼び出されたときにのみtextViewを更新します。以降の呼び出しでは、変更されません。
だが!
アプリをバックグラウンドに置いて(ホームヒット)、再起動すると、TextViewにすべての適切なテキストが表示されます。
私は何が欠けていますか?