Java 如何从循环中频繁更新EditText中的数字?

Java 如何从循环中频繁更新EditText中的数字?,java,android,Java,Android,我的代码应该在您单击按钮后,从EditText中的循环中频繁更新一个数字(不仅显示结果,延迟100) 旧代码: 现在我有这个: final Handler randomHandler=new Handler(); 最终可运行随机更新=新可运行(){ @凌驾 公开募捐{ num1=新随机数().nextInt(6)+1; edit1.setText(String.valueOf(num1)); 重复--; rep.setText(String.valueOf(repeat)); randomHa

我的代码应该在您单击按钮后,从EditText中的循环中频繁更新一个数字(不仅显示结果,延迟100)

旧代码:

现在我有这个:

final Handler randomHandler=new Handler();
最终可运行随机更新=新可运行(){
@凌驾
公开募捐{
num1=新随机数().nextInt(6)+1;
edit1.setText(String.valueOf(num1));
重复--;
rep.setText(String.valueOf(repeat));
randomHandler.postDelayed(这个,1000);
}
};
btnpl5.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
重复=重复+5;
rep.setText(String.valueOf(repeat));
按钮2.可设置可点击(真);
按钮2.setEnabled(真);
}
});
button2.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
randomUpdate.run();
按钮2.可设置可点击(错误);
按钮2.setEnabled(错误);
}

问题:重复为0后它不会停止(继续-1-2-3-4..)

您可以使用
AsyncTask
在后台延迟,并使用
publishProgress()
更新UI

class TextDisplayTask extends AsyncTask<Integer, Integer, Void> {

    private int DELAY_MILLIS = 100; // ... set your delay here

    @Override
    protected Void doInBackground(Integer... params) {

        for (int i = 0; i < params[0]; i++) {
            int num = new Random().nextInt(6) + 1;
            publishProgress(num);
            Thread.sleep(DELAY_MILLIS);
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        edit1.setText(String.valueOf(values[0]));
    }
}

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        new TextDisplayTask().execute(20);  // show a number 20 times
    }
 });
class TextDisplayTask扩展了异步任务{
private int DELAY_MILLIS=100;/…在此处设置延迟
@凌驾
受保护的Void doInBackground(整数…参数){
对于(int i=0;i
在任何应用程序上调用任何方法时,必须始终处于UI线程上 视图。如果您正在其他线程上工作,并且希望更新 如果该线程中的视图状态为,则应使用处理程序

试试这个

   handler.postDelayed(new Runnable(){
        @Override
        public void run() {
            num1 = new Random().nextInt(6)+1;
            // get previous value and append new generated
             edit1.setText(edit1.getText().toString()+String.valueOf(num1)); 
            }
   }, (1000)); // run this method in every 1000 milliseconds

这可能会对您有所帮助。

您是否希望追加?它应该将while循环中的每个新数字设置为EditText。延迟多长时间以及何时发生?延迟100以及在每个随机数之后。
   handler.postDelayed(new Runnable(){
        @Override
        public void run() {
            num1 = new Random().nextInt(6)+1;
            // get previous value and append new generated
             edit1.setText(edit1.getText().toString()+String.valueOf(num1)); 
            }
   }, (1000)); // run this method in every 1000 milliseconds