#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();