我的程序中有两个CountDownTimers:一个4秒,一个24秒。我希望较长的计时器每隔4秒暂停一次,而较短的计时器正在运行。然后当短计时器结束时,长计时器开始倒计时。这是两个计时器的代码:
final CountDownTimer loop = new CountDownTimer(4000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
number.setVisibility(View.GONE);
final TextView prompt = (TextView) findViewById(R.id.prompt);
prompt.setVisibility(View.VISIBLE);
prompt.setText(" Enter the number");
final EditText input = (EditText) findViewById(R.id.enterAnswer);
input.setVisibility(View.VISIBLE);
input.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
Editable answer = input.getText();
int finalAnswer = Integer.parseInt(String.valueOf(answer));
int finalLoadG1 = Integer.parseInt(String.valueOf(number.getText()));
input.setVisibility(View.GONE);
prompt.setVisibility(View.GONE);
if (finalAnswer == finalLoadG1) {
score++;
}
number.setVisibility(View.VISIBLE);
int loadG1 = generateG1.nextInt(1000000)+10000;
number.setText(""+loadG1);
input.getText().clear();
start();
return true;
default:
}
}
return false;
}
});
}
}.start();
new CountDownTimer(24000, 1000) {
@Override
public void onTick (long millisUntilFinished) {
}
@Override
public void onFinish() {
TextView result = (TextView) findViewById(R.id.outcome);
result.setText("Score: "+ score);
TextView prompt = (TextView) findViewById(R.id.prompt);
prompt.setVisibility(View.GONE);
final EditText input = (EditText) findViewById(R.id.enterAnswer);
input.setVisibility(View.GONE);
loop.cancel();
number.setVisibility(View.GONE);
}
}.start();
我考虑过命名更长的计时器,然后在onTick中为更短的计时器添加name.pause()。问题是,因为较长的计时器是在较短的计时器之后写的,所以它的名称在初始化之前是不可识别的。 Java按顺序读取内容,对吗?或者是所有语言?
如果有人能帮助我,我会感激不尽。
作为任何能够回答的问题的一个侧面问题,当用户按下EditText(用于int)的输入时,是否有任何方法可以防止应用程序崩溃?比如,我可以让应用程序在没有强制停止的情况下继续吗?
非常感谢提前。
答案 0 :(得分:0)
在代码中创建单独的方法来启动/暂停/恢复24秒计时器。您需要存储您的milliTillFinished 24秒计时器,以便您可以将其传递给恢复计时器方法。您可以在4秒计时器的onTick()方法上暂停24秒计时器,并在onFinish()方法上恢复它。
启动计时器:
public void timerStart(long timeLengthMilli) {
timer = new CountDownTimer(timeLengthMilli, 1000) {
@Override
public void onTick(long milliTillFinish) {
milliLeft=milliTillFinish;
}
暂停计时器:
public void timerPause() {
timer.cancel();
}
恢复计时器:
private void timerResume() {
timerStart(milliLeft);
}