Android TextView Таймер

голоса
17

Для моего Android приложения есть таймер, который измеряет, сколько времени прошло. Когда-нибудь 100 миллисекунд мне обновить TextView с каким-нибудь текстом, как «Оценка: 10 Времени: 100.10 секунды». Но, я считаю TextView обновляет только первые несколько раз. Приложение по-прежнему очень отзывчив, но ярлык не будет обновляться. Я пытался позвонить .invalidate (), но она по-прежнему не работает. Я не знаю, есть ли какой-нибудь способ, чтобы исправить это, или лучше виджет для использования.

Вот пример моего кода:

float seconds;
java.util.Timer gametimer;
void updatecount() { TextView t = (TextView)findViewById(R.id.topscore);
t.setText(Score: 10 - Time: +seconds+ seconds);
t.postInvalidate();
}
public void onCreate(Bundle sis) {
... Load the UI, etc...
  gametimer.schedule(new TimerTask() { public void run() {
     seconds+=0.1; updatecount();
} }, 100, 100);
}
Задан 07/02/2009 в 01:35
источник пользователем
На других языках...                            


4 ответов

голоса
18

Общее решение заключается в использовании android.os.Handler вместо который работает в потоке пользовательского интерфейса. Он делает только обратные вызовы один выстрел, так что вы должны запустить его снова каждый раз, когда ваш обратный вызов называется. Но достаточно проста в использовании. Пост в блоге на эту тему была написана несколько лет назад:

http://android-developers.blogspot.com/2007/11/stitch-in-time.html

Ответил 26/11/2009 d 17:58
источник пользователем

голоса
2

То, что я думаю, что это происходит, вы падаете от потока пользовательского интерфейса. Существует один «петлитель» поток, который обрабатывает все обновления экрана. Если вы пытаетесь вызвать «недействительными ()» и вы не на эту тему ничего не случится.

Попробуйте использовать «postInvalidate ()» на ваш взгляд, вместо этого. Это будет препятствовать вам обновить представление, когда вы не в текущем потоке пользовательского интерфейса.

Подробнее здесь

Ответил 07/02/2009 d 04:30
источник пользователем

голоса
0

Существует еще один способ изменить текст каждую секунду; это ValueAnimator. Вот мое решение:

  long startTime = System.currentTimeMillis();
  ValueAnimator animator = new ValueAnimator();
            animator.setObjectValues(0, 1000);
            animator.setDuration(1000);
            animator.setRepeatCount(ValueAnimator.INFINITE);
            animator.addListener(new AnimatorListenerAdapter() {

                @Override
                public void onAnimationStart(Animator animation) {
                    long currentTime = System.currentTimeMillis();
                    String text = TimeFormatUtils.formatTime(startTime - currentTime);
                   yourTextView.setText(text);
                }

                @Override
                public void onAnimationRepeat(Animator animation) {
                    long currentTime = System.currentTimeMillis();
                    String text = TimeFormatUtils.formatTime(startTime - currentTime);
                    yourTextView.setText(text);
                }
            });
            animator.start();
Ответил 14/11/2016 d 12:45
источник пользователем

голоса
0

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

public class MyCountDownTimer extends CountDownTimer {
        public MyCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
        }

        @Override
        public void onFinish() {

            ExamActivity.this.submitresult();
        }

        @Override
        public void onTick(long millisUntilFinished) {

            long millis = millisUntilFinished;

            int seconds = (int) (millis / 1000) % 60;
            int minutes = (int) ((millis / (1000 * 60)) % 60);
            int hours = (int) ((millis / (1000 * 60`enter code here` * 60)) % 24);

            String ms = String
                    .format("%02d:%02d:%02d", hours, minutes, seconds);
            txtimedisplay.setText(ms);
        }
    }
Ответил 19/12/2014 d 14:00
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more