2012-06-26 45 views
1

我倒計時倒計時到特定日期。每個記號(時間間隔1秒)都會更新一個文本框,並留下剩餘天數/小時/分鐘的時間。我的問題是,會議紀要(不知道日期/小時數)一直在​​閃爍。意思是說,18分17分,18分17分,然後17分16分,然後繼續這樣做。Android倒計時不能正常工作,數字在2個值之間閃爍並且時區不工作

閃爍問題解決了,現在它只是不工作的時區。 (使用來自Pshemo的代碼解決閃爍問題)

此外TimeZone似乎不工作。它顯示2小時到很多。已嘗試使用SimpleTimeZone更改它,但它不起作用,仍顯示+2小時(不管SimpleTimeZone上的設置如何)

可能是什麼原因?

倒計時代碼:

  new CountDownTimer(remaining, 1000) { 
     TextView tv = (TextView)getActivity().findViewById(R.id.introTimeLeft); 
     public void onTick(long millisUntilFinished) {   
      SimpleTimeZone ts = new SimpleTimeZone(2, "Middle Europe"); 

      Calendar cal = Calendar.getInstance(ts); 
      cal.set(2012, 5, 28, 17, 0); 
      long endTime = cal.getTimeInMillis(); 
      long currentTime = System.currentTimeMillis(); 
      long remaining = endTime - currentTime; 

     tv.setText(getDurationBreakdown(remaining)); 
     } 

     ... 

     }.start(); 

public String getDurationBreakdown(long millis) 
{ 
    if(millis < 0) 
    { 
     throw new IllegalArgumentException("Duration must be greater than zero!"); 
    } 

    long days = TimeUnit.MILLISECONDS.toDays(millis); 
    millis -= TimeUnit.DAYS.toMillis(days); 

    long hours = TimeUnit.MILLISECONDS.toHours(millis); 
    millis -= TimeUnit.HOURS.toMillis(hours); 

    long minutes = (long) Math.ceil(TimeUnit.MILLISECONDS.toMinutes(millis)); 

    StringBuilder sb = new StringBuilder(64); 
    sb.append(days); 
    sb.append(" Days "); 
    sb.append(hours); 
    sb.append(" Hours "); 
    sb.append(minutes); 
    sb.append(" Minutes"); 

    return(sb.toString()); 
} 

回答

2

這只是胡亂猜測,但在嘗試它沒有魅力。

從我看到你在相同的地方看到currentTimeendTime

long endTime = cal.getTimeInMillis(); 
long currentTime = System.currentTimeMillis(); 

您還沒有指定在日曆對象毫秒所以cal.getTimeInMillis()使用當前毫秒。所以,你的代碼

long remaining = endTime - currentTime; 

有時會等於值一樣183360000,但有時也將equalt珍惜像182999999(取決於有多少毫秒創作endTimecurrentTime之間傳遞)。

這可能導致誤差爲1毫秒,但舍入後也可能爲1秒/分鐘/小時/天(如果此值將在下一毫秒中更改)。

您可以通過閱讀endTime只有一次,並且只更新currentTime的同時計算remaining

+0

這解決了閃爍問題。只讀一次endTime。時區問題仍然存在。 – Patrick

+0

@Patrick我沒有與時區工作,但設法谷歌這樣的[這個](http://tutorials.jenkov.com/java-date-time/java-util-timezone.html) - >也許「轉換時區之間「會有所幫助。 – Pshemo

0

解決這個問題,我認爲你可能會更新由兩個不同的位置文本視圖。是否有另一個類正在更新您的TextView?