Время обновления в хронометре

#android

#Android

Вопрос:

У меня есть хронометр. Должно отображаться время. Когда я запускаю таймер, время всегда одно и то же, но оно должно обновляться

Вызов:

                 Log.e("XXX","OnClick");
                String[] array = clock.getText().toString().split(":");
                int ms = (Integer.valueOf(array[0])*60   Integer.valueOf(array[1]))*60000;
                Log.e("XXX",String.valueOf(ms));
                MyTimer counter = new MyTimer(ms, 1000, Timer.this,clock);

                counter.start();
  

Таймер:

 public class MyTimer extends CountDownTimer {
    private Context con;
    private Chronometer clock;

    public MyTimer(long millisInFuture, long countDownInterval, Context context, Chronometer clock) {
        super(millisInFuture, countDownInterval);
        this.con = context;
        this.clock= clock;
        // TODO Auto-generated constructor stub
    }


    @Override
    public void onTick(long millisUntilFinished) {

        int seconds = (int) (millisUntilFinished / 1000) % 60 ;
        int minutes = (int) ((millisUntilFinished / (1000*60)) % 60);
        int hours   = (int) ((millisUntilFinished / (1000*60*60)) % 24);
        clock.setText( String.format("d:d:d", hours,minutes,seconds));
        Log.e("Timer", String.valueOf(millisUntilFinished));

    }
  

Проблема в том, что время в хронометре всегда одно и то же. и журнал (таймер) также
не отображаются. Может быть, обновление пользовательского интерфейса происходит слишком быстро?

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

1. какое значение ms при запуске этого кода? Так ли это > 1000 ?

2. да, минимум 1 минута = 60000мс

3. Вы уверены, что не получаете исключения где-нибудь? Попробуйте поместить весь код в try/catch целях тестирования

4. кстати, почему вы используете Chronometer вместо TextView ?

Ответ №1:

Я не совсем уверен в передаче вашего контекста и представления в качестве аргумента вашего расширенного класса. Может быть, вам стоит попробовать эту адаптацию вашего кода (и избавиться от вашего MyTimer класса)?

 Log.e("XXX","OnClick");
String[] array = clock.getText().toString().split(":");
int ms = (Integer.valueOf(array[0])*60   Integer.valueOf(array[1]))*60000;
Log.e("XXX",String.valueOf(ms));

new CountDownTimer(ms,1000){
    @Override
    public void onTick(long millisUntilFinished) {

        int seconds = (int) (millisUntilFinished / 1000) % 60 ;
        int minutes = (int) ((millisUntilFinished / (1000*60)) % 60);
        int hours   = (int) ((millisUntilFinished / (1000*60*60)) % 24);
        clock.setText( String.format("d:d:d", hours,minutes,seconds));
        Log.e("Timer", String.valueOf(millisUntilFinished));

    }
}.start();