繁体   English   中英

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

[英]Why value of only last iteration(999) is printed in the text field ? I want all numbers to be printed before getting replaced by next number

我是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) );


                }
            }
        });



    }
}

正如@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);
        }
    });
  }
}

这将继续以 1 秒的延迟更改TextView的文本,您可以通过在 runnable 中设置毫秒来根据需要更改延迟。

您甚至可以为此目的使用倒数计时器,但它更像是一种解决方法,需要您计算正确的时间等。例如,显示 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 秒

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM