2016-04-22 11 views
0

私は3つのタイマーを持っています。最初の1つは、準備が整ったタイマーのようなものなので、一度しか表示されません。Android forループが正しくカウントされない

2番目と3番目は、ユーザーが望む回数だけ表示したいです。タイマーを開始する前に、+ボタンまたは - ボタンを押して、TextViewの値を設定し、回数を選択する必要があります。

int counter = 0; 

     homeScreenPlus.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        dodajInterval(); 
        homeScreenMinus.setEnabled(counter > 0); 
       } 
      }); 

      homeScreenMinus.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        oduzmiInterval(); 
        homeScreenMinus.setEnabled(counter > 0); 
       } 
      }); 


     } 

     private void oduzmiInterval() { 
      counter--; 
      brojIntervala.setText(Integer.toString(counter)); 
     } 

     private void dodajInterval() { 
      counter++; 
      brojIntervala.setText(Integer.toString(counter)); 
     } 

そして、ここでは、タイマーのコードです::このコードで行うの

public void homeScreenStart(View view) { 
     linearniLayoutSetup.setVisibility(View.GONE); 


     CountDownTimer firstCountDown = new CountDownTimer(seekBarTimerDelay.getProgress() * 1000 + 100, 1000) { 

      @Override 
      public void onTick(long millisUntilFinished) { 
       updateTimer((int) millisUntilFinished/1000); 
      } 

      @Override 
      public void onFinish() { 
       textViewTimerVrijeme.setText("00:00"); 
       countDownTimerTrci(); 

       karticaTimera.setBackgroundColor(getResources().getColor(R.color.kartica_trci)); 
       textViewTimerTrciHodajBlaBla.setText(getResources().getString(R.string.timer_trci)); 
      } 
     }.start(); 
    } 

    public void countDownTimerTrci() { 

     for (int i = 0; i < counter; i++) { 
      toolbar.setBackgroundColor(getResources().getColor(R.color.kartica_trci)); 
      CountDownTimer secondCountDown = new CountDownTimer(seekBarIntervaliVisokogIntenziteta.getProgress() * 1000 + 100, 1000) { 

       @Override 
       public void onTick(long millisUntilFinished) { 
        updateTimer((int) millisUntilFinished/1000); 
       } 

       @Override 
       public void onFinish() { 
        textViewTimerVrijeme.setText("00:00"); 
        karticaTimera.setBackgroundColor(getResources().getColor(R.color.kartica_hodaj)); 
        imageViewTimerSlika.setImageResource(R.drawable.ic_timer_niski_intenzitet); 
        textViewTimerTrciHodajBlaBla.setText(getResources().getString(R.string.timer_hodaj)); 
        toolbar.setBackgroundColor(getResources().getColor(R.color.kartica_hodaj)); 
        CountDownTimer thirdCountDown = new CountDownTimer(seekBarIntervaliNiskogIntenziteta.getProgress() * 1000 + 100, 1000) { 

         @Override 
         public void onTick(long millisUntilFinished) { 
          updateTimer((int) millisUntilFinished/1000); 
         } 

         @Override 
         public void onFinish() { 
          textViewTimerVrijeme.setText("00:00"); 
          countDownTimerTrci(); 
         } 
        }.start(); 
       } 
      }.start(); 
     } 
    } 

あなたが見ることができるように、それはボタンが押されたときに呼び出されるメソッドだと私は「ワン最初のタイマーは一度しか表示されないので、私はそれをfoorループに含めませんでした。

最初のタイマーは1回だけ表示され、それは機能しますが、他の2つのタイマーはアプリを終了するまで繰り返されます。

問題がどこにあるか教えていただけますか?

+0

)あなたのcountDownTimerTrci方法は、鉱山で

ます。public void countDownTimerTrciを(置き換え、これを試してみてください。 – Nfear

答えて

1

あなたがループを作成し、再び方法countDownTimerTrci呼び出している第3のタイマからonFinishで{

if(counter>0) { 
     toolbar.setBackgroundColor(getResources().getColor(R.color.kartica_trci)); 
     CountDownTimer secondCountDown = new CountDownTimer(seekBarIntervaliVisokogIntenziteta.getProgress() * 1000 + 100, 1000) { 

      @Override 
      public void onTick(long millisUntilFinished) { 
       updateTimer((int) millisUntilFinished/1000); 
      } 

      @Override 
      public void onFinish() { 
       textViewTimerVrijeme.setText("00:00"); 
       karticaTimera.setBackgroundColor(getResources().getColor(R.color.kartica_hodaj)); 
       imageViewTimerSlika.setImageResource(R.drawable.ic_timer_niski_intenzitet); 
       textViewTimerTrciHodajBlaBla.setText(getResources().getString(R.string.timer_hodaj)); 
       toolbar.setBackgroundColor(getResources().getColor(R.color.kartica_hodaj)); 
       CountDownTimer thirdCountDown = new CountDownTimer(seekBarIntervaliNiskogIntenziteta.getProgress() * 1000 + 100, 1000) { 

        @Override 
        public void onTick(long millisUntilFinished) { 
         updateTimer((int) millisUntilFinished/1000); 
        } 

        @Override 
        public void onFinish() { 
         counter--; 
         textViewTimerVrijeme.setText("00:00"); 
         countDownTimerTrci(); 
        } 
       }.start(); 
      } 
     }.start(); 
    } 
} 
+0

あなたは神です!ありがとうございました! – DaxHR

+0

再帰的に続行されるので、私はちょうどそれを置き換えました。再帰的なメソッドの呼び出しに注意してください。また、このリンクをチェックしてください。https://examples.javacodegeeks.com/java-basics/exceptions/java-lang-stackoverflowerror -how-to-solve-stackoverflowerror /あなたに役立つかもしれないこのリンクをチェックしてください –

関連する問題