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一个接一个地自动
请告诉我我做错了什么
答案 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)
答案 2 :(得分:0)
您需要在发布消息之间将500毫秒延迟移至for循环。我认为你期望消息一个接一个地顺序执行,但它们没有,这就是你看到最后一个结果的原因。