如何使用CountdownTimer onResume更新TextView?

时间:2016-08-22 20:13:51

标签: android countdowntimer

我想使用倒数计时器,但有问题。如果我启动它然后按下后退按钮(将生命周期更改为onStop)并返回活动 - 我无法在TextView中看到计时器值。但是在Logcat中我看到计时器工作。

问题:如何在返回活动后更新TextView(onResume)

更新。 虽然我不会关闭活动,但这段代码可以正常运行 - 好吧。但是,如果按下后退按钮,TextView中没有值。 计时器方法代码(此方法从onCreate调用):

timer = new CountDownTimer(rest + 1000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                secondsUntilFinish = Math.round(millisUntilFinished / 1000);
                String minutes = String.format("%02d",TimeUnit.SECONDS.toMinutes(secondsUntilFinish));
                String seconds = String.format("%02d",TimeUnit.SECONDS.toSeconds(secondsUntilFinish) - TimeUnit.MINUTES.toSeconds(TimeUnit.SECONDS.toMinutes(secondsUntilFinish)));
                tvRoutineTimer.setText(getResources().getString(R.string.exercise_rest_timer, minutes, seconds));
                Log.d(LOG_TAG, "onTick = " + getResources().getString(R.string.exercise_rest_timer, minutes, seconds));
            }

            @Override
            public void onFinish() {
                tvRoutineProgress.setText(getString(R.string.routine_progress, currentStep, totalSteps));
                tvRoutineTimer.setText(getString(R.string.exercise_rest_timer, "00", "00"));
                notificationAfterRest();
                btnExerciseDone.setText(getString(R.string.button_exercise_done));
                btnExerciseDone.setEnabled(true);
                tvExercisePlaceholder.setText(getString(R.string.exercise_current_title));
            }
        }.start();

1 个答案:

答案 0 :(得分:-1)

您需要从UI线程更新TextView。像这样更新你的TextView

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tvRoutineTimer.setText(getResources().getString(R.string.exercise_rest_timer, minutes, seconds));
        });   

runOnUiThread放在onTick()