Создание повторяющегося таймера обратного отсчета с разным временем

#java #android #for-loop #countdown #countdowntimer

#java #Android #для цикла #обратный отсчет #таймер обратного отсчета

Вопрос:

Я пытаюсь научиться программированию. Итак, я решил сделать небольшой проект, но я застрял.

Я пытаюсь создать таймер обратного отсчета. У меня есть 3 разных времени. Например, первый — 10 секунд, второй — 5 секунд, а третий — 7 секунд. Итак, я хочу создать приложение, которое начнет отсчет с 10 секунд, а когда оно завершит, начнет отсчет со второго таймера, а затем с третьего.

 public class MainActivity extends AppCompatActivity {

    private Button mStartButton;
    private Button mResetButton;
    private Button mStopButton;

    private TextView mTextViewCountDown;
    private TextView mTextViewCounter;
    private CountDownTimer mCountDownTimer;
    private int countme = 0 ;
    private int [] array = new int[3];


@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    mStartButton = findViewById(R.id.button_start);
    mStopButton = findViewById(R.id.button_stop);
    mResetButton = findViewById(R.id.button_reset);
    mTextViewCountDown = findViewById(R.id.text_view_countdown);
    mTextViewCounter = findViewById(R.id.text_s);

    array[0]=10000;
    array[1]=5000;
    array[2]=70000;


    mStartButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            for(int i = 0; i<3; i  ){

                mCountDownTimer = new CountDownTimer(array[i], 1000) {
                    @Override
                    public void onTick(long millisUntilFinished) {
                         mTextViewCountDown.setText(""  millisUntilFinished/1000);
                    }

                    @Override
                    public void onFinish() {
                        countme  ;
                        if(countme / 3 == 3){
                            mCountDownTimer.cancel();
                        }else{
                            start();
                        } } }.start(); 
                         } 
                         } 
                        }); } }
  

Я не думаю, что цикл for подходит для моей проблемы. Это не увеличивает переменную i один раз, я думаю, она увеличивается с каждым нажатием. Как новичок, я не мог понять, что мне делать.

Комментарии:

1. Если вы пытаетесь запустить countdowntimer один за другим одним нажатием кнопки, почему бы вам не использовать 10 5 7 (т.е. 22 секунды) и условие в onTick

2. может быть, вы можете использовать Thread.sleep(array[i]); для ожидания цикла до тех пор, пока значение в массиве

3. Потому что я не хочу, чтобы пользователь видел общее время на экране. Время для каждого пользователя. Есть задачи, которые выполняются в ограниченное время. Первый парень запускается, и когда его время истекает, он переключается на 2. парень, а затем на 3. парень. Таким образом, каждый должен видеть свое ограниченное время на экране, а не общее время.

Ответ №1:

Вам не нужно для цикла попробовать что-то вроде этого:

 private void startCountDowntimer(long millis, int count) {
        count   ;
        int finalCount = count;
        new CountDownTimer(millis, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                mTextViewCountDown.setText(""  millisUntilFinished/1000);
            }

            @Override
            public void onFinish() {
                if (finalCount == 1) {
                    startCountDowntimer(5000, 1);
                } else if (finalCount == 2) {
                    startCountDowntimer(7000, 2);
                } else {
                    //all finished
                }
            }
        }.start();
    }
  

и на кнопке нажмите:

 mStartButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startCountDowntimer(10000, 0);
            }
        });
  

Комментарии:

1. По какой-то причине он не считается точно. Только первый раз является правильным. Второй идет как 5 3 2 1 0, а третий — 7 5 4 2 1 0