2013-12-22 6 views
0

Я написал приложение для обратного отсчета для Android, и до сих пор мне удалось отобразить время с момента открытия приложения, но оно не обновляется. Я думаю, что это имеет какое-то отношение к использованию функции postDelayed, но я понятия не имею, как это применить, и я не могу ничего сделать из документации. Помощь была бы очень оценена!Повторяя скрипт каждую секунду

То, что я до сих пор:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Time now = new Time(); 
    now.setToNow(); 

    Time decision = new Time(); 
    decision.set(7, 0, 2014); 

    long nowutc = now.toMillis(false); 
    long decutc = decision.toMillis(false); 

    long difference = decutc - nowutc; 

    int days = (int) difference/86400000; 
    int hours = (int) (difference % 86400000)/3600000; 
    int leftover = (days*86400000) + (hours*3600000); 
    int minutes = (int) (difference - leftover)/60000; 
    int secleft = (int) leftover + (minutes*60000); 
    int seconds = (int) (difference-secleft)/1000; 

    ((TextView)findViewById(R.id.time)).setText(days + " days " + hours + " hours " + minutes + " minutes " + seconds + " seconds "); 
    } 
+0

Что вы имеете в виду обновления? Должны ли вы сбросить время, если вы отправляете приложение на фон или что вы ожидаете? – Prem

+0

взгляните на эту ссылку http://stackoverflow.com/questions/4873196/dynamically-update-textview-in-android –

+0

Я имею в виду, что сценарий запускается каждую секунду, поэтому таймер фактически рассчитывает вниз, вместо того, чтобы оставаться статичным. – CuriousCabbage

ответ

0

Попробуйте это:

private int mInterval = 500; // ms 
private Handler mHandler; 
private TextView mTextView; 

@Override 
protected void onCreate(Bundle bundle) { 
    setContentView(R.layout.whatever); 
    mTexView = (TextView) findViewById(R.id.time); 
    mHandler = new Handler(); 
    mHandler.post(mUpdateTime); 
} 

Runnable mUpdateTime = new Runnable() { 
    @Override 
    public void run() { 
     Time now = new Time(); 
     now.setToNow(); 

     Time decision = new Time(); 
     decision.set(7, 0, 2014); 

     long nowutc = now.toMillis(false); 
     long decutc = decision.toMillis(false); 

     long difference = decutc - nowutc; 

     int days = (int) difference/86400000; 
     int hours = (int) (difference % 86400000)/3600000; 
     int leftover = (days*86400000) + (hours*3600000); 
     int minutes = (int) (difference - leftover)/60000; 
     int secleft = (int) leftover + (minutes*60000); 
     int seconds = (int) (difference-secleft)/1000; 
     mTextView.setText(days + " days " + hours + " hours " + minutes + " minutes " + seconds + " seconds "); 
     mHandler.postDelayed(mUpdateTime, mInterval); 
    } 
}; 
+0

Отлично работает, большое вам спасибо! – CuriousCabbage

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