2017-08-09 5 views
0

リセットボタンを押したときにCountdownTimerを5秒間スキップしたいAndroidアプリケーションに取り組んでいます。たとえば、カウントダウンタイマーがt = 15になったときにリセットボタンが押された場合、タイマーは次の5秒をスキップし、タイマーはt = 10と表示されます。これは私が試したものですが、動作しませんでした。ボタンを押したときにカウントダウンタイマーを5秒間スキップする(Androidスタジオ)

ボタンのコード:

buttonReset = (Button) findViewById(R.id.ButtonReset); 

    buttonReset.setOnClickListener(
      new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        TextView output = (TextView) findViewById(R.id.Display); 
        r = 1; 
        output.setText(""); 
        resetStatus = true; 
       } 
      } 
    ); 

編集:私はタイマーコードを更新しました。今、古いタイマーをキャンセルして新しいタイマーを開始します。私は今、リセットボタンを押すとタイマーが5秒後に表示がフリーズをスキップし、

public void start() 
{ 
    new CountDownTimer(59*1000, 1000) 
    { 
     TextView timer = (TextView) findViewById(R.id.Timer); 
     public void onTick(long millisUntilFinished) 
     { 
      int TimeSeconds = (int) millisUntilFinished/1000; 

      if (resetStatus) 
      { 
       cancel(); 

       TimeSeconds = TimeSeconds - 5; 
       final int finalTimeSeconds = TimeSeconds; 

       new CountDownTimer(finalTimeSeconds*1000, 1000) 
       { 
        @Override 
        public void onTick(long millisUntilFinished) { 
         if (finalTimeSeconds >= 10) 
         { 
          //displays time 
          timer.setText("00:" + finalTimeSeconds); 
         } 

         else 
         { 
          //displays time 
          timer.setText("00:0" + finalTimeSeconds); 
         } 
         resetStatus = false; 
        } 

        @Override 
        public void onFinish() { 
         gameOverDialogue(); 

        } 
       }.start(); 
      } 

      else 
      { 
       if (TimeSeconds >= 10) 
       { 
        //displays time 
        timer.setText("00:" + TimeSeconds); 
       } 

       else 
       { 
        //displays time 
        timer.setText("00:0" + TimeSeconds); 
       } 

      } 
     } 
     public void onFinish() 
     { 
      gameOverDialogue(); 
     } 
    }.start(); 
} 


はタイマーコードをカウントダウン。しかし、タイマーは刻々と変化し続けて0に達しています.236カウントダウンタイマーでfinal変数finalTimeSecondsTimeSecondsの代わりに使用されるためだと思います。助言がありますか?あなたが唯一の変更あなたのコードでは、事前

答えて

0

おかげで、1時間、表示するための時間が、あなたのCountDownTimerは、この編集による影響を受けません。

新しい遅延で別のCountDownTimerを再起動し、現在のカウンタをキャンセルする必要があります。

+0

私の質問でコードを変更しました。私は古いタイマーをキャンセルして今すぐ新しいタイマーを開始しますが、編集した質問の末尾に記載した別の問題が発生します –

+0

更新されたコードでは、作成する2番目のCountDownTimerには最初のものと同じコードが含まれていません。 CountDownTimerの独自のサブクラスを作成し、必要に応じて新しいものを作成する方がよいでしょう。キャンセルの音はあなたのonclickで直接行われ、更新された時間で新しいものを開始します。あなたのブールresetStatusについては忘れてください。 – smora

0

問題は、フラグが表示されても表示が変わることですが、タイマーは変化しません。あなたの割り当て

int TimeSeconds = (int) millisUntilFinished/1000; 

が1ダックごとに実行されます。 resetStatusフラグをチェックしてTextViewを調整しますが、実際のタイマーには影響しません。それが次回に刻み込まれるとき、それは適切な(取り残されていない)時間を残すでしょう。

この問題を解決するには、ややこしいことがあります。 @MoraSが示唆しているように、控除が正当なものになるたびに新しいCountdownTimerを作成することができます。この解決法はうまくいくが、控除が頻繁に行われることが予想される場合は、アプリの速度が遅くなることがあります。

私の提案は、控除の総数を把握し、それを使ってTextViewを最新の状態に保ち、必要に応じて早めにタイマーをキャンセルすることです。

+0

私の質問でコードを変更しました。古いタイマーをキャンセルして今すぐ新しいタイマーを開始しますが、編集した質問の末尾に記載されている別の問題が発生します –

+0

私はあなたの質問を理解していません。タイマーとは、CountDownTimerやTextViewタイマーのことですか?あなたがCountDownTimerについて話しているなら、あなたはどのようにタイマーがまだ動いていることを知っていますか? TextViewについて話していると、ディスプレイはフリーズしても、タイマーはまだ動いていますか? –

+0

CountDownTimer()は5秒間をスキップし、Textviewタイマーは控除時間を表示します。今、Textviewのタイマーはフリーズしますが、CountDownTimer()は意味をなさえすれば控除後の時間からカウントダウンし続けます。 e。g、CountDownTimerが55で、リセットボタンを押すと、TextViewタイマーは50を表示してフリーズします。しかし、CountDowbTimerは50から0まで数え続けます。 –

関連する問題