0

我的 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 将拥有所有正确的文本。

我错过了什么?

4

3 回答 3

2

我想通了-这是一个GUI问题..

我不小心将 TextView 的高度(在滚动视图内)设置为精确值。显然,这导致 fullScroll 方法搞砸了,不能完全向下滚动,所以添加的文本是不可见的。将 TextView 的高度设置为 wrap_content 解决了这个问题。

于 2011-02-28T06:56:47.740 回答
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 设置在可运行的内部。

于 2011-02-28T06:44:54.830 回答
0

在您的活动中放入以下代码行setContentView并从发送方法中删除

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

将此行更改rcv.setText(rcv.getText()+"Me: "+message+"\n");

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

在发送方法中

于 2011-02-28T06:39:03.953 回答