2015-06-05 2 views
-1

Прошло некоторое время, но я вернулся к разработке Android. Я создаю простое приложение секундомера.Обновление текстового поля со временем

У меня есть класс Timer и TextView, который я хочу постоянно обновлять с течением времени. Я знаю, что могу создать поток, который будет обновлять TextView, но я не уверен, как это сделать. Должен ли мой таймер продлить поток?

Как будет выглядеть код для обновления textView на временной интервал.

Это мой класс Timer:

public class Timer { 

    private double startTime; 
    private double endTime; 
    private boolean isRunning; 

    public Timer() { 
     startTime = 0; 
     endTime = 0; 
     isRunning = false; 
    } 

    public void reset() { 
     isRunning = true; 
     startTime = System.currentTimeMillis(); 
    } 

    public double getElapsedTime() { 
     if (isRunning) 
      endTime = System.currentTimeMillis(); 
     double timeElapsed = endTime - startTime; 
     return timeElapsed; 
    } 
} 

Я также нашел эту related question. Но я не могу понять, как заставить его работать. Я был бы признателен за любой код, который показывает, как сделать обновление с моим кодом. Я не включил мою MainActivity, но это образец FullScreenActivity.

+0

Собираетесь ли вы использовать сервис для этого? Как в связанном вопросе –

+1

Что не работает для принятого ответа в связанном вопросе? – dave

+1

ленив в использовании google? –

ответ

1

Попробуйте это. Он должен быть более точным

class Timer extends AsyncTask<Void, String, String> 
{ 

    @Override 
    protected String doInBackground(Void... params) { 
     long startTime = Calendar.getInstance().getTimeInMillis(); 
     long nowTime; 
     while(true && !isCancelled()) 
     { 
      nowTime = Calendar.getInstance().getTimeInMillis(); 
      publishProgress((float)((nowTime-startTime)/1000)+""); 
      try { 
       Thread.sleep(100); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    @Override 
    protected void onProgressUpdate(String... values) { 
     textview.setText(values[0]); 
     super.onProgressUpdate(values); 
    } 

} 

не забудьте остановить AsyncTask когда требуется timer.cancel(true);

+0

похоже, что он должен работать. Я, вероятно, что-то не хватает. Я создал метод setTextView(), поэтому я могу использовать указанный textView в классе Timer. Тем не менее, когда я устанавливаю textView из MainActivity, он не обновляется. Наверное, я смотрю на него, когда я просыпаюсь. Спасибо за вашу помощь. – Xitcod13

+0

Я сегодня был свободен в офисе, поэтому я попробовал свой код. Он отлично работает на эмуляторе, но как-то не работал на моем HTC 816G. Надеюсь, поможет. Он также сделал систему лагги, поэтому вставка потока сна для 100 мс внутри цикла может помочь. –

Смежные вопросы