TextView文本未更新

时间:2011-06-30 14:03:48

标签: android textview

package com.aviyehuda.test.multithreading;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MultithreadingTest extends Activity {
Button btn;
private Handler myHandler;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btn = (Button) findViewById(R.id.Button01);
}

public void buttonClicked(View v) {
    myHandler = new Handler();
    MyThread mThread = new MyThread();
    mThread.start();
}

class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 30; i++) {
            myHandler.post(new NewThreaad(i));
        }
    }
}
class NewThreaad implements Runnable{
    int i;
    public NewThreaad(int n) {
        i=n;
    }
        @Override
        public void run() {
            ((TextView) findViewById(R.id.TextView01)).setText("Hello:"+i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
}
}

我有上面提到的代码,但在TextView上获得结果Hello29但是我想要Hello1,Hello2,hello3 ................. Hello29一个接一个地自动

请告诉我我做错了什么

3 个答案:

答案 0 :(得分:2)

好吧,主要的问题是你没有追加覆盖。而不是

 ((TextView) findViewById(R.id.TextView01)).setText("Hello:"+i);

DO

  TextView tv = ((TextView) findViewById(R.id.TextView01));
  String text = tv.getText().toString();
  tv.setText(text + " Hello:" + i);

答案 1 :(得分:2)

有几件事。

首先,在更改文本后,您应该在TextView上调用invalidate以强制刷新。

其次,要在UI上执行操作,您应该在UI线程中运行它。使用runOnUiThread

答案 2 :(得分:0)

您需要在发布消息之间将500毫秒延迟移至for循环。我认为你期望消息一个接一个地顺序执行,但它们没有,这就是你看到最后一个结果的原因。