所以我有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循环中的原因。

第一个计时器仅显示一次并且可以正常工作,但是其他两个计时器一直重复,直到我关闭应用程序为止。

有人可以告诉我问题出在哪里吗?

最佳答案

试试这个,用我的替换您的countDownTimerTrci方法

公共无效countDownTimerTrci(){

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

08-17 23:41