首页 > 解决方案 > 为什么仅在文本字段中打印最后一次迭代(999)的值?我希望在被下一个数字替换之前打印所有数字

问题描述

我是新手android studio,想克服这个问题。

在创建一些未来的应用程序(如秒表、计时器等)时,它会对我有很大帮助。

提前致谢 !!

public class MainActivity extends AppCompatActivity {

    private EditText k;
    private Button start;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        k=findViewById(R.id.kf);
        start=findViewById(R.id.startf);

        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for(int i=1;i<1000;i++)
                {

                    k.setText(String.valueOf(i) );


                }
            }
        });



    }
}

标签: javaandroiditeration

解决方案


正如@f1sh 在评论中已经提到的那样,您的 for 循环正在以如此快的速度执行,您所看到的只是最终值。对于这种情况,android最好的解决方案之一是在Handler不阻塞 UI 的情况下发布延迟功能。

因此,为了显示 1 到 999,您可以尝试以下操作:

public class MainActivity extends AppCompatActivity {

private EditText k;
private Button start;
int count;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    k=findViewById(R.id.kf);
    start=findViewById(R.id.startf);
    final Handler handler = new Handler();
    final Runnable runnable = new Runnable() {
        public void run() {
            if (count < 1000) {
                k.setText(String.valueOf(count));
                count++;
                handler.postDelayed(this, 1000);
            } else {
                handler.removeCallbacks(this);
            }
        }
    };
    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            count = 1;
            handler.postDelayed(runnable, 0);
        }
    });
  }
}

这会TextView以 1 秒的延迟不断更改文本,您可以根据需要通过设置可运行的毫秒数来更改延迟。

您甚至可以为此目的使用倒数计时器,但它更像是一种解决方法,需要您计算正确的时间等。例如显示 1 到 10 将是这样的:

...
count = 1;
new CountDownTimer(11000, 1000) {
        public void onTick(long millisUntilFinished) {
            tv.setText(String.valueOf(count));
            count++;
        }
        public void onFinish() {
        }
    }.start();

在这里,您每 1 秒显示一次值,持续 11 秒


推荐阅读