我的Android应用程序出现了一个看似奇怪的问题。 无论我调用append还是setText,我的TextView都只会更新一次。
我的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;
}
});
发送方法:
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会有所有正确的文本。
我错过了什么?
答案 0 :(得分:2)
我明白了 - 这是一个GUI问题..
我不小心将TextView(在scrollview中)的高度设置为精确值。显然,这导致fullScroll方法搞砸而不是完全向下滚动,因此添加的文本是不可见的。将TextView的高度设置为wrap_content解决了这个问题。
答案 1 :(得分:0)
在活动中setContentView
之后放置以下代码行,然后从发送方法中删除
TextView rcv = (TextView)findViewById(R.id.rcvMsg);
将此行rcv.setText(rcv.getText()+"Me: "+message+"\n");
更改为
rcv.setText(rcv.getText().toString()+"Me: "+message+"\n");
发送方法中的
答案 2 :(得分: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是不可能的,因为两者在不同的线程上运行。