Java 如何从线程每次在循环中更改textview中的文本
我的任务是制作一个计数器,它将从线程中每次刷新循环中的值。以下是我编写的代码:Java 如何从线程每次在循环中更改textview中的文本,java,android,multithreading,Java,Android,Multithreading,我的任务是制作一个计数器,它将从线程中每次刷新循环中的值。以下是我编写的代码: thread = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i<10;i++){ Bundl
thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i<10;i++){
Bundle bundle = new Bundle();
bundle.putInt("NUMBER", i);
Log.i(getClass().getSimpleName(), i+" ");
final int finalI = i;
textCounter.post(new Runnable() {
@Override
public void run() {
Log.i(getClass().getSimpleName(), finalI+" value set");
textCounter.setText(String.valueOf(finalI));
}
});
SystemClock.sleep(500);
}
}
});
但不是
0
1
...
9
textview.add 0
textview.add 1
...
textview.add 9
实际上,在这种情况下,睡眠不会在for循环内部显示任何效果。您需要做的是创建一个延迟的循环,以继续下一个值并正常地在textCounter上发布。所以代码应该是这样的
thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
final int finalI=i;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Bundle bundle = new Bundle();
bundle.putInt("NUMBER", finalI);
Log.i(getClass().getSimpleName(), finalI + " ");
textCounter.post(new Runnable() {
@Override
public void run() {
Log.i(getClass().getSimpleName(), finalI+" value set");
textCounter.setText(String.valueOf(finalI));
}
});
}
}, 500*i);
}
}
}
);
thread=新线程(new Runnable()){
@凌驾
公开募捐{
对于(int i=0;i<10;i++){
最终int finalI=i;
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
Bundle=新Bundle();
bundle.putInt(“数字”,finalI);
Log.i(getClass().getSimpleName(),finalI+“”);
textCounter.post(新的Runnable(){
@凌驾
公开募捐{
Log.i(getClass().getSimpleName(),finalI+“值集”);
textCounter.setText(String.valueOf(finalI));
}
});
}
},500*i);
}
}
}
);
在这种情况下,实际上睡眠不会在for循环中显示任何效果。您需要做的是创建一个延迟的循环,以继续下一个值并正常地在textCounter上发布。所以代码应该是这样的
thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
final int finalI=i;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Bundle bundle = new Bundle();
bundle.putInt("NUMBER", finalI);
Log.i(getClass().getSimpleName(), finalI + " ");
textCounter.post(new Runnable() {
@Override
public void run() {
Log.i(getClass().getSimpleName(), finalI+" value set");
textCounter.setText(String.valueOf(finalI));
}
});
}
}, 500*i);
}
}
}
);
thread=新线程(new Runnable()){
@凌驾
公开募捐{
对于(int i=0;i<10;i++){
最终int finalI=i;
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
Bundle=新Bundle();
bundle.putInt(“数字”,finalI);
Log.i(getClass().getSimpleName(),finalI+“”);
textCounter.post(新的Runnable(){
@凌驾
公开募捐{
Log.i(getClass().getSimpleName(),finalI+“值集”);
textCounter.setText(String.valueOf(finalI));
}
});
}
},500*i);
}
}
}
);