0

私の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にすべての適切なテキストが表示されます。

私は何が欠けていますか?

4

3 に答える 3

2

私はそれを理解しました-それはGUIの問題でした。

誤ってTextView(スクロールビュー内)の高さを正確な値に設定しました。どうやら、これによりfullScrollメソッドが失敗し、完全に下にスクロールしなかったため、追加されたテキストは表示されませんでした。TextViewの高さをwrap_contentに設定すると、問題が解決しました。

于 2011-02-28T06:56:47.740 に答える
0

アクティビティの後にコード行の下に配置setContentViewし、sendメソッドから削除します

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

この行rcv.setText(rcv.getText()+"Me: "+message+"\n"); をに変更します

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

sendメソッドで

于 2011-02-28T06:39:03.953 に答える
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を設定することは、2つが別々のスレッドで実行されているためわかりません。

于 2011-02-28T06:44:54.830 に答える