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);
}
}
}
);