Как я могу исправить этот код, чтобы мои android текстовые обновления обновлялись с помощью счетчика времени и отображали оставшиеся секунды? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь сделать приложение обратного отсчета от mov ie Обратный отсчет. Я очень плохо знаком с кодированием. Цель здесь - обновить текстовое представление, которое показывает количество секунд, оставшихся в живых. Вот код java, который я написал, чтобы попытаться выполнить это. Я знаю, что другие аспекты, такие как годы, дни, часы и минуты, еще не закончены.


import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {
    private TextView mTextViewCountDownYears;
    private TextView mTextViewCountDownDays;
    private TextView mTextViewCountDownHours;
    private TextView mTextViewCountDownMinutes;
    private TextView mTextViewCountDownSeconds;

    private Button mButtonAccept;

    private CountDownTimer mCountDownTimer;

    private Boolean mTimerRunning;

    long timeLeftToLive = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Calendar deathDay = Calendar.getInstance();
        deathDay.set(2021,7,24,10,14,45);
        Calendar today = Calendar.getInstance();

        long diff = deathDay.getTimeInMillis() - today.getTimeInMillis();
        timeLeftToLive = diff;

        mTextViewCountDownYears = findViewById(R.id.text_view_countdown_years);
        mTextViewCountDownDays = findViewById(R.id.text_view_countdown_days);
        mTextViewCountDownHours = findViewById(R.id.text_view_countdown_hours);
        mTextViewCountDownMinutes = findViewById(R.id.text_view_countdown_minutes);
        mTextViewCountDownSeconds = findViewById(R.id.text_view_countdown_seconds);

        mButtonAccept = findViewById(R.id.button_accept);

        mButtonAccept.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startTimer();
            }
        });
    }
    private void startTimer(){
        mCountDownTimer = new CountDownTimer(timeLeftToLive, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                timeLeftToLive = millisUntilFinished;
                updateTextView();
            }

            @Override
            public void onFinish() {

            }
        };
    }
    private void updateTextView() {
        long secondsLeft = timeLeftToLive / 1000;

        String secondsLeftFormatted = String.format("%02d",secondsLeft);

        mTextViewCountDownSeconds.setText(secondsLeftFormatted);
    }
}

1 Ответ

0 голосов
/ 18 января 2020

Ваш код выглядит хорошо, и вы так близко к нему работаете! Вам просто нужно добавить .start() в конец определения CountDownTimer внутри вашей функции startTimer() (перед точкой с запятой). Вот так:

private void startTimer(){
    mCountDownTimer = new CountDownTimer(timeLeftToLive, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            timeLeftToLive = millisUntilFinished;
            updateTextView();
        }

        @Override
        public void onFinish() {

        }
    }.start();
}

Есть отличный пример для вас, чтобы сослаться на здесь , если вам это нужно

...