2016-10-21 91 views
0

私のプログラムには2つのカウントダウンタイマーがあり、長い方(120秒)と短い方(3.5秒)です。 3.5秒タイマーが実行されている間は120秒タイマーを一時停止し、3.5秒タイマーが実行されていないときは長いタイマーを継続して実行します。したがって、プログラムは、残りの120秒で3.5秒が実行されている間に開始され、3.5秒が120秒を実行すると3.5秒が1回実行されると一時停止します(ユーザーが一旦Enterを押すと)。この?CountDownTimerを一時停止する - Android

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(); 

これまで私はこの質問をしましたが、残念なことに有効な回答はありませんでした。もし誰かがこの質問に答えることができれば、感謝するでしょう。あなたの答えを説明するのに役立つコードを自由に挿入してください。事前に多くの感謝。

+0

あなたはこの質問を100回聞くことができますが、カウントダウンタイマを一時停止する方法はありません。回避策を実行し、必要なときに新しいタイマーを作成する必要があります。今あなたの質問は重複の複製です.... – Opiatefuchs

+0

@Opiatefuchs体は前に私にその答えを与えました。どのタイマーを追加する必要がありますか?私は私の問題を回避することができてうれしいです、あなたは説明を投稿して、解決済みとマークすることができますか? – User44

+0

@Opiatefuchs 'what timer'とはまったく別の意味ですか?既存のタイマーの別のコピー?その他... – User44

答えて

1

[OK]を、私は例を与えることをしようとしますが、これという保証は何が必要正確ではないことができます。

グローバル変数とCountDownTimerオブジェクトを作成します。

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

は120秒タイマーを作成します

mThreePointFiveSecondsTimer = new ThreePointFiveSecondsTimer (3500, 1000); 
mThreePointFiveSecondsTimer.start(); 
mHundredTwentySecondsTimer.cancel(); 
mHundredTwentySecondsTimer = null; 
:任意の時点で、あなたは3.5タイマーを開始することを決定し、

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

その後:

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秒タイマーを開始

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秒タイマーを作成します

これはちょっとしたアイデアですが、あなたのニーズに合わせて調整する必要があります。申し訳ありませんが、あなたが必要とするすべてのものを与えることはできません、それはフレームを超えています。

+0

私はちょうどここで確認する前に問題を解決したので、私はあなたの記事を実際に読んでいませんでした。私は問題を解決するために私がしたことを簡単に投稿しましたが、私はあなたの時間と努力のためにあなたの答えを私を助けようとしています。ご理解いただき、ありがとうございました。 – User44

+0

:)....そしてそれは同じ解決策でした...ある種の思考移転..それはあなたの答えにどのように解決したのですか? – Opiatefuchs

0

あなたはこのようにしてみてください(私がテストしていないが、それは働くことを願っています)

public class MainActivity extends BaseActivity { 

    private long remainingTimeForTimer = 0; 

    private CountDownTimer mCountDownTimer 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Start first timer 
     test1(120 * 1000); 

     // now on the basis of remaining timer you can cancel current timer and after that second timer you can start that timer with remaining time 

     if(remainingTimeForTimer > 0) 
     { 
      test1(remainingTimeForTimer); 
     } 


    } 



    private void test1(long totalTimerTime) 
    { 

     mCountDownTimer = new CountDownTimer(totalTimerTime, 1000) { 

      @Override 
      public void onTick(long millisUntilFinished) { 

       remainingTimeForTimer = millisUntilFinished; 

      } 

      @Override 
      public void onFinish() { 


       //trialCount = 0; 

      } 
     }; 

     mCountDownTimer.start(); 

    } 



    @Override 
    protected void onDestroy() { 
     if (mCountDownTimer != null) { 
      mCountDownTimer.cancel(); 
     } 
     super.onDestroy(); 
    } 
} 
0

は、私は何度も試した後、この問題を解決してきた

を解決しました。大きなタイマーを短い方のonFinishに入れ、その長いタイマーの最初の時間をmillisUntilFinishedに設定しました。ユーザーがEnterを押すと、長いタイマーがキャンセルされ、EditTextボックスが表示されるたびに更新された時刻に自動的に開始されます。

関連する問題