![](/img/trans.png)
[英]Why when I try to print all prime numbers below 10 the number 4 is also printed with them?
[英]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.