Получить переменную из обратного отсчета и установить его в TextView - PullRequest
0 голосов
/ 03 апреля 2020

Мне нужна ваша помощь, чтобы получить переменную из обратного отсчета и установить это значение в виде текста. Предположим, если обратный отсчет остановился на 0:40 se c, и я хочу поместить это число в текстовое представление.

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

I learned to create this app from udemy online tutorial. Its called Complete android developer course- Build 23 Apps!!. Its lesson 38- App Egg timer.

Это моя основная деятельность. java файл

public class MainActivity extends AppCompatActivity {
    TextView timerTv;
    SeekBar timerSeekBar;
    Button startBtn;

    CountDownTimer countDownTimer;

    boolean counterisActive = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timerTv = (TextView) findViewById(R.id.countdowntimertextview);
        timerSeekBar = (SeekBar) findViewById(R.id.timerSeekBar);

        startBtn = (Button) findViewById(R.id.startBtn);

        timerSeekBar.setMax(300);
        timerSeekBar.setProgress(20);

        timerSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                updateTimer(progress);

                Log.i("Seekbar changes", String.valueOf(progress), null);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

    }

    public void resetTimer(){


        //This is where I want to set the text.
        timerTv.setText("Trying to get text from countdown!!");

        startBtn.setText("START!");
        timerSeekBar.setEnabled(true);
        countDownTimer.cancel();
        timerSeekBar.setProgress(20);
        counterisActive = false;

    }

    public void buttonClicked(View view){

        if(counterisActive){
            resetTimer();

        }else {
            counterisActive =  true;
            timerSeekBar.setEnabled(false);
            startBtn.setText("STOP!");

            Log.i("Button Clicked", "Clicked");
             countDownTimer = new CountDownTimer(timerSeekBar.getProgress() * 1000 + 100, 1000) {


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

                @Override
                public void onFinish() {
                    MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.templebell);
                    mediaPlayer.start();
                    Log.i("Timer Finished", "Done!!");
                    resetTimer();
                }
            }.start();
        }
    }

    public void updateTimer(int secondLefts){
        int minutes = secondLefts / 60;
        int seconds = secondLefts - (minutes * 60);

        String secondString = Integer.toString(seconds);

        if(seconds <= 9) {
            secondString = "0" + seconds;
        }

        timerTv.setText(minutes + " : " + secondString );

    }

}

enter image description here

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Я думаю, вам нужно приостановить таймер. Сначала создайте глобальную переменную long в своей деятельности;

long timerProgress;

Измените метод restProgress (), как показано ниже, или вы можете добавить новый метод pauseTimer ().

public void restTimer(){
        //This is where I want to set the text.

        updateTimer((int) timerProgress/1000);
        startBtn.setText("START!");
        timerSeekBar.setEnabled(true);
        countDownTimer.cancel();
        timerSeekBar.setProgress((int) timerProgress/1000);
        counterisActive = false;
    }

Знайте, добавьте эту строку в метод переопределения onTick.

@Override
public void onTick(long millisUntilFinished) {
         updateTimer((int) millisUntilFinished / 1000);
         // add this line for store progress timer.
         timerProgress = millisUntilFinished;
     }
  • Вы можете добавить еще одну кнопку - одну для паузы, а другую - для таймера покоя.
0 голосов
/ 03 апреля 2020

Попробуйте заменить timerTv.setText(minutes + " : " + secondString ); на

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        timerTv.setText(minutes + " : " + secondString );
    }
});

Если вы попытаетесь обновить средний поток пользовательского интерфейса, он дождется завершения текущего потока, прежде чем обновлять текст.

...