2012-02-10 105 views

回答

2

這是我的課時鐘和日期顯示。改變它倒數。

import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import android.os.Handler; 
import android.widget.TextView; 
/** 
* The class for creating and refreshing many different fields on different layouts, 
* that can hold actual time and/or date in different formats 
* The formats should be as in http://developer.android.com/reference/java/text/SimpleDateFormat.html. 
* Only present and visible fields are being actualized, so there is no need to clean the clock list after closing an activity 
* 
* Examples of use: 
* 
*  Clock.registerClock((TextView) findViewById(R.id.TimeField), "HH:mm"); 
*  Clock.registerClock((TextView) findViewById(R.id.DateField), "d.M.yyyy EEE"); 
*  Clock.start(10000L); 
* 
* @author Petr Gangnus 
*/ 
public final class Clock { 
    /** 
    * the handler that works instead of timer and supports UI 
    */ 
    static private Handler handler = new Handler(); 
    /** 
    * the interval of the time refreshing 
    */ 
    static private long refreshStep; 

    /** 
    * pairs TextView clockFace + time/date format 
    */ 
    private TextView clockFace; 
    private String format; 
    private Clock(TextView clockFace, String format){ 
     this.clockFace=clockFace; 
     this.format=format; 
    } 
    // here is the list of views containing the visual timers that should be held actual 
    static private ArrayList<Clock> clocks=new ArrayList<Clock>(); 
    /** 
    * fills all timer fields by actual time value, according to their formats. 
    */ 
    static private Runnable mUpdateTimeTask = new Runnable() { 
     public void run() { 
      for(Clock clock:clocks){ 
       showActualTimeDate(clock); 
      } 
      handler.postDelayed(this,refreshStep); 
     } 
    }; 

    //============================================ public members ==================================================================== 
    /** 
    * add a clock to the list of updating clocks 
    * @param clockFace - the place where the time or date will be shown 
    * @param format - the format of the time/date 
    * @return 
    */ 
    public static boolean registerClock(TextView clockFace, String format){ 
     if (clockFace==null) return false; 
     if(clocks.contains(clockFace)){ 
      // old clockFace 
      clocks.get(clocks.indexOf(clockFace)).format=format; 
     } else { 
      // new clockFace 
      clocks.add(new Clock(clockFace, format)); 
     } 
     return true; 
    } 
    /** 
    * remove a clock from the updating list 
    * @param clockFace 
    * @return 
    */ 
    public static boolean unRegisterClock(TextView clockFace){ 
     if (clockFace==null) return false; 
     if(clocks.contains(clockFace)){ 
      // found clockFace 
      clocks.remove(clocks.indexOf(clockFace)); 
     } else { 
      // not found clockFace 
      return false; 
     } 
     return true; 
    } 
    /** 
    * put in the "place" the actual date/time in the appropriate "format" 
    * @param place 
    * @param format 
    */ 
    public static void showActualTimeDate(Clock clock){ 
     if (clock.clockFace==null) return; 
     if (clock.clockFace.getVisibility()!=TextView.VISIBLE) return; 
     Date thisDate=new Date(); 
     SimpleDateFormat df=new SimpleDateFormat(clock.format); 
     clock.clockFace.setText(df.format(thisDate)); 
    } 
    /** 
    * start the ticking for all clocks 
    * @param step the tick interval 
    */ 
    public static void start(long step) { 
     refreshStep=step; 
     handler.removeCallbacks(mUpdateTimeTask); 
     handler.postDelayed(mUpdateTimeTask, 0); 
    } 
    /** 
    * Stopping ticking all clocks (not removing them) 
    * the calling could be put somewhere in onStop 
    */ 
    public static void stop() { 
     handler.removeCallbacks(mUpdateTimeTask); 
    } 
} 
+0

我很抱歉,但你的回答是太......巨大的 – 2013-09-16 11:01:23

+0

@ EL-conteDe-monteTereBentikh 1.正確的,但在風格和有效性。 2.當我寫下它時,我想到了你的暱稱:-) – Gangnus 2013-09-18 06:46:39

+0

hhhhhhhhhhhhhhhhhhhhhh你是對的 – 2013-09-18 07:39:36

7

對於那些有興趣的人,看看CountDownTimer類。

例子:

new CountDownTimer(30000, 1000) { 

public void onTick(long millisUntilFinished) { 
    mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
} 

public void onFinish() { 
    mTextField.setText("done!"); 
} 
}.start();