Android обратный отсчет не работает

1

Попытка сделать небольшой таймер обратного отсчета в моем приложении, но он не работает.

Идея - отсчет времени до определенного времени. Сначала по дням и когда он приближается, часами.

Следующий метод находится внутри моего Fragmentclass.java (так что это фрагмент)

@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onViewCreated(view, savedInstanceState);


        Calendar cal = Calendar.getInstance();
        cal.set(2012, 8, 29, 10, 0);
        long endTime = cal.getTimeInMillis(); 
        long currentTime = System.currentTimeMillis();
        long remaining = currentTime - endTime;                 
        long seconds = remaining / 1000 % 60;               

         new CountDownTimer(seconds, 1000) {
             TextView tv = (TextView)getActivity().findViewById(R.id.introTimeLeft);
             public void onTick(long millisUntilFinished) {

                 Calendar cal = Calendar.getInstance();
                 cal.set(2012, 8, 29, 10, 0);
                long endTime = cal.getTimeInMillis(); 
                long currentTime = System.currentTimeMillis();
                long remaining = currentTime - endTime;                 
                long hours = remaining / 3600000;
                long mins = remaining / 60000 % 60;
                long seconds = remaining / 1000 % 60;
                long days = hours / 24;
                String remainingText = String.valueOf(days) + " days";

                Log.i("countdown",String.valueOf(days));
                 tv.setText("Days left: " + days);
             }

             public void onFinish() {
                 Log.i("countdown","CD Finished");
                 tv.setText("CD Finished!");
             }
          }.start();
    }

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

И это лучший подход?

  • 0
    Это ничего не отображает? Или это не обратный отсчет?
  • 0
    TextView.setText не работает вообще. Это не обновляет элемент управления. По крайней мере, его ударил тик метод благодаря посту Архимеда.
Показать ещё 2 комментария
Теги:
datetime
countdown
android-sdk-2.3

1 ответ

2
Лучший ответ

Вот значения переменных, если я запускаю ваш код:

endTime     = 1348902045437
currentTime = 1340645325437
remaining   = -8256720000
seconds     = 0

как вы видите seconds == 0, и это причина.

Также отметим, что первый аргумент в CountDownTimer(long millisInFuture, long countDownInterval) конструктор является

Количество миллисов в будущем от вызова до начала() до тех пор, пока не будет отсчитан обратный отсчет, и вызывается функция onFinish().

Таким образом, фиксированный код будет:

Calendar cal = Calendar.getInstance();
cal.set(2012, 8, 29, 10, 0);
long endTime = cal.getTimeInMillis(); 
long currentTime = System.currentTimeMillis();
long remaining = endTime - currentTime;

new CountDownTimer(remaining, 1000) {
...

ОБНОВИТЬ:

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

public void onTick(long millisUntilFinished) {
    final String days = .. // some code to generate days
    getActivity().runOnUiThread(new Runnable() {
        public void run() {
            tv.setText("Days left: " + days);
        }
    });
}

public void onFinish() {
    Log.i("countdown","CD Finished");
    getActivity().runOnUiThread(new Runnable() {
        public void run() {
            tv.setText("CD Finished!");
        }
    });
}

Если это не поможет - тогда у меня нет идей.

  • 0
    Хорошо, я вижу это, теперь это удар по методу тика. Но это не обновление текста. Я даже удалил встречную часть и просто добавил простой текст. Я также попытался переместить переменную textview за пределы счетчика, но это просто вызывает сбой с нулевой ссылкой. Так как я могу обновить текстовое поле?
  • 0
    Работает. Глупое Затмение / Android / App.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню