【发布时间】:2015-06-10 01:59:38
【问题描述】:
我正在尝试编写一个应用程序,在 textview 上向用户显示一个字符串,并根据用户输入替换文本。这应该以 60 秒的时间间隔发生。 我尝试使用倒数计时器,它在 onFinish 方法上将布尔变量设置为 false。虽然这个布尔值是正确的,但我正在尝试更改文本视图中的字符串(进一步的工作将是由于用户操作而更改文本,但我仍在尝试让这项工作用于简单的操作)。
目前,该应用似乎被卡住了,没有任何反应,但如果我删除了 while 循环,屏幕上会出现一个文本(应该是这样)。
为此目的使用 while 循环是否有问题?与计时器一起工作有不同的方式吗?
(p.s我知道代码中存在一些问题,但这只是为了隔离问题。谢谢!)
编辑: 我将尝试澄清我的意图: 我想给用户任务,他应该在给定的时间内执行。我想在屏幕上显示剩余时间以及要执行的任务。当用户完成任务后,如果时钟上还有时间,他会按下一个按钮,另一个任务会出现。目标是在给定时间内完成尽可能多的任务。
我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_game);
Bundle b = getIntent().getExtras();
game = b.getParcelable("game_record");
figuresList = new ArrayList<String>(game.getFiguresList());
clockView = (TextView) findViewById(R.id.clockView);
figureText = (TextView) findViewById(R.id.figureText);
timer = new CountDownTimer(10000, 1000) {
public void onTick(long millisUntilFinished) {
clockView.setText(Long.toString(millisUntilFinished / 1000));
}
public void onFinish() {
clockView.setText("done!");
isTurn = false;
}
};
playRound();
}
private void playRound() {
figuresIterator = figuresListUsage.iterator();
isTurn = true;
String nextFigure = figuresIterator.next();
timer.start();
while (isTurn == true) {
figureText.setText(nextFigure);
nextFigure = figuresIterator.next();
}
}
【问题讨论】:
-
删除循环并将
figureText.setText(nextFigure); nextFigure = figuresIterator.next();添加到您的onTick()。您不需要布尔值,因为一旦计数器完成,它将停止更改文本。 -
是的,但这只是解决此问题的一种解决方法,正如我所说,这是我需要的简化案例。这样做会在固定时间更改文本,而我想根据用户输入来更改它
-
您的问题不清楚。那你为什么要使用
CountDownTimer?也许你想see here 了解如何使用 TextWatcher -
我想给用户任务,他应该在给定的时间内执行。我想在屏幕上显示剩余时间以及要执行的任务。当用户完成任务后,如果时钟上还有时间,他会按下一个按钮,另一个任务会出现。目标是在给定时间内完成尽可能多的任务。
-
这样就更清楚了。你想什么时候检查输入?在每个角色上,也许用户在尝试任务后单击了一个按钮,有些不同?