暂停CountDownTimer而另一个运行 - Android

时间:2016-10-21 17:39:28

标签: java android android-studio countdowntimer pause

我的程序中有两个倒计时器,一个较长的(120秒)和一个较短的(3.5秒)。我希望在3.5秒计时器运行时暂停120秒计时器,并且在3.5秒计时器未运行时让较长计时器继续运行。所以程序从剩余的120秒开始,而3.5秒的一个运行,然后当3.5秒的一个运行120秒时,一个将开始并且仅在3.5秒的一个再次运行时暂停(一旦用户按下回车。)我该怎么做此?

final CountDownTimer loop = new CountDownTimer(3500, 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);

                                        if (score>=0 && score<=2){
                                            int loadG1 = generateG1.nextInt(89999)+10000;
                                            number.setText(""+loadG1);
                                        }

                                        else if (score>=3 && score<=5){
                                            int loadG1 = generateG1.nextInt(899999)+100000;
                                            number.setText(""+loadG1);
                                        }

                                        else if (score>=6 && score<=9){
                                            int loadG1 = generateG1.nextInt(8999999)+1000000;
                                            number.setText(""+loadG1);
                                        }

                                        else if (score>=10 && score<=14){
                                            int loadG1 = generateG1.nextInt(89999999)+10000000;
                                            number.setText(""+loadG1);
                                        }

                                        else if (score>=15 && score<=20){
                                            int loadG1 = generateG1.nextInt(899999999)+100000000;
                                            number.setText(""+loadG1);
                                        }

                                        else if (score>=21) {
                                            int loadG1 = generateG1.nextInt((int) 8999999999L)+1000000000;
                                            number.setText(""+loadG1);
                                        }

                                        input.getText().clear();

                                        start();

                                        return true;
                                    default:
                                }
                            }
                            return false;
                        }
                    });
                }
            }.start();

            new CountDownTimer(120000, 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();

我之前已经问过这个问题,但遗憾的是没有得到有效答案。如果有人能够回答这个问题,将不胜感激。请随意插入任何有助于解释您的答案的代码。非常感谢提前。

3 个答案:

答案 0 :(得分:1)

好的,我会尝试举例,但不能保证这正是你所需要的:

创建一个全局变量和CountDownTimer个对象:

Long remainingTime = 120000L;
ThreePointFiveSecondsTimer mThreePointFiveSecondsTimer;
HundredTwentySecondsTimer mHundredTwentySecondsTimer;

创建120秒计时器:

public class HundredTwentySecondsTimer extends CountDownTimer {

        public HundredTwentySecondsTimer(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onTick(long millisUntilFinished) {


        }

        @Override
        public void onFinish() {

        }
    }

创建3.5秒计时器:

  public class ThreePointFiveSecondsTimer extends CountDownTimer {

            public ThreePointFiveSecondsTimer(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);
            }

            @Override
            public void onTick(long millisUntilFinished) {

              remainingTime = millisUntilFinished;//set the remaining time
            }

            @Override
            public void onFinish() {

//start the 120 second countdowntimer again
    mHundredTwentySecondsTimer  = new MyCountDownTimer(remainingTime, 1000);
    mHundredTwentySecondsTimer.start();
            }
        }

启动120秒计时器:

mHundredTwentySecondsTimer  = new MyCountDownTimer(remainingTime, 1000);
mHundredTwentySecondsTimer.start();

然后,您随时决定启动3.5计时器:

mThreePointFiveSecondsTimer   = new ThreePointFiveSecondsTimer (3500, 1000);
mThreePointFiveSecondsTimer.start();
mHundredTwentySecondsTimer.cancel();
mHundredTwentySecondsTimer = null;

这只是背后的想法,但你必须根据自己的需要进行调整。对不起,但不能给你所需的所有东西,这将超出框架。

答案 1 :(得分:0)

你可以尝试这样(我没有测试但希望它能起作用)

FATAL: Unrecoverable I/O error detected in the execution of the DATA step program.
       Aborted during the EXECUTION phase.

答案 2 :(得分:0)

解决

我多次尝试后解决了这个问题。我最终将较大的计时器放在较短计时器的onFinish中,并将该较长计时器的初始时间设置为millisUntilFinished。然后,当用户按下Enter键时取消长计时器,每当显示EditText框时,它会自动以更新的时间开始。

相关问题