2017-02-08 9 views
1

私はチェス時計を作っていますが、遅れが必要です(カウントする前に10秒待っているようです)。ハンドラを使用しましたが、ボタンが10秒以内にクリックされた場合は何も起こりません。助けてください!ありがとう!私のコード :カウントダウンタイマーの遅延 - Android

mHandler.postDelayed(new Runnable() { 
         public void run() { 
          // count down timer start 
          timer2 = new CountDownTimer(totalSeconds, Integer.parseInt(delay.getText().toString())) { 
           public void onTick(long millisUntilFinished) { 
            secondsTimer = (int) (millisUntilFinished/1000) % 60; 
            minutesTimer = (int) ((millisUntilFinished/(1000 * 60)) % 60); 
            hoursTimer = (int) ((millisUntilFinished/(1000 * 60 * 60)) % 24); 
            person2.setText(hoursTimer + ":" + minutesTimer + ":" + secondsTimer); 
           } 

           public void onFinish() { 
            person2.setText("Time Up!"); 
            person2.setBackgroundColor(Color.RED); 
            mp.start(); 
           } 
          }.start(); 
         } 
        }, finalDelay); 

私は遅延をしたいが、私はUIをロックし、それがハンドラで今やっているようアプリが応答しないしたくありません。どんな助けもありがとう!前もって感謝します!

答えて

2

、その後、一定期間の後に、それを実行したい場合、私はあなたにCountdownTimerを置くべきではないと思われる場合ハンドラ。代わりに2つのハンドラを作成することができます。ここに例があります。

private void startHandlerAndWait10Seconds(){ 
    Handler handler1 = new Handler(); 
    handler1.postDelayed(new Runnable() { 

     public void run() { 
      // Start Countdown timer after wait for 10 seconds 
      startCountDown(); 

     } 
    }, 10000); 
} 

private void startCountDown { 
    final Handler handler2 = new Handler(); 
    handler2.post(new Runnable() { 
     int seconds = 60; 

     public void run() { 
      seconds--; 
      mhello.setText("" + seconds); 
      if (seconds < 0) { 
       // DO SOMETHING WHEN TIMES UP 
       stopTimer = true; 
      } 
      if(stopTimer == false) { 
       handler2.postDelayed(this, 1000); 
      } 

     } 
    }); 
} 
+0

お返事ありがとうございます、しかし、あなたは 'startHandlerAfterWaited10Seconds()'メソッドで何が起きているのか説明できますか? –

+0

こんにちはKharbanda、 上記の方法は、カウントダウンタイマーのように機能します。 CountDownタイマークラスの代わりにHandlerを使用することをお勧めします。 - HandlerはCountDownタイマークラスよりも優れたパフォーマンスを持つ必要があります。あなたはCounDownタイマーは、実際にはその中核にハンドラを実装し、有用なhttp://stackoverflow.com/questions/35497844/handler-postdelayedrunnable-vs-countdowntimer また、ここで参照してください見つけることができます。 –

+0

ありがとう!私はあなたの説明がウェブサイトだけでなく有用であることを発見しました!どうもありがとう。しかし、ちょうど確かめるために、カウントダウンタイマーはメソッド 'startHandlerAndWait10Seconds()'ですか? –

0

あなたは

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      new Handler().post(new Runnable() { 
       public void run() { 
        // count down timer start 
        new CountDownTimer(100000, 1000) { 
         public void onTick(long millisUntilFinished) { 
          button.setText(String.valueOf(millisUntilFinished)); 
         } 

         public void onFinish() { 
          button.setText("Time Up!"); 
         } 
        }.start(); 
       } 
      }); 
     } 
    }); 

、すぐにタイマーを開始したいとあなたは

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      new Handler().postDelayed(new Runnable() { 
       public void run() { 
        // count down timer start 
        new CountDownTimer(100000, 1000) { 
         public void onTick(long millisUntilFinished) { 
          button.setText(String.valueOf(millisUntilFinished)); 
         } 

         public void onFinish() { 
          button.setText("Time Up!"); 
         } 
        }.start(); 
       } 
      }, 1000); 
     } 
    }); 
+1

私は遅延が欲しいですが、私はUIをロックして、アプリケーションを応答しないようにしたくありません。 –

+0

新しいハンドラーが新しいスレッドで実行されると思います。 :) – sadat