2012-03-26 137 views
0

我試圖更新TextView中的時間,Runnable應該是每秒運行一次。 RunnableFragmentonCreateView()開始,但它只執行一次。運行每秒運行一次只在碎片運行一次onCreateView()

有人可以幫忙嗎?

感謝

public class MyFragment extends Fragment { 

    Calendar mCalendar; 

    private Runnable mTicker; 
    private Handler mHandler; 

    TextView mClock; 

    String mFormat; 

    private boolean mClockStopped = false; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     RelativeLayout view = (RelativeLayout) inflater.inflate(R.layout.meteo_widget, container, false); 

     /* 
     * Clock (from DigitalClock widget source) 
     */ 

     mClock = (TextView) view.findViewById(R.id.clock); 

     mCalendar = Calendar.getInstance(); 

     mHandler = new Handler(); 

     mTicker = new Runnable() { 
      public void run() { 
       if(mClockStopped) return; 
       mCalendar.setTimeInMillis(System.currentTimeMillis()); 
       mClock.setText(DateFormat.format("hh:mm:ss", mCalendar)); 
       mClock.invalidate(); 
       long now = SystemClock.uptimeMillis(); 
       long next = now + (1000 - now % 1000); 
       mHandler.postAtTime(mTicker, next); 
      } 
     }; 
     mTicker.run(); 

     return view; 
    } 

    @Override 
    public void onResume() 
    { 
     super.onResume(); 
     mClockStopped = true; 
    } 

    @Override 
    public void onPause() 
    { 
     mClockStopped = false;   
     super.onPause(); 
    } 

} 

回答

2

這是因爲你通過設置mClockStopped = true來停止時鐘;在onResume()

+0

我需要休息。謝謝。 – jul 2012-03-26 19:10:48

0

刪除此​​創造Timer然後用這個方法來調用你的TimerTask,而不是Runnable的,每一秒(1000毫秒)scheduleAtFixedRate

+0

不推薦TimerTask:http://developer.android.com/resources/articles/timed-ui-updates.html – jul 2012-03-26 18:16:59

+0

那麼爲什麼不使用'postDelayed(java.lang.Runnable,long) '而不是'mHandler.postAtTime(mTicker,next);'並使用1000 ms? – 2012-03-26 18:19:48

+0

因爲我想「請求在下一個硬性第二邊界上打勾」,如DigitalClock小部件(http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android /4.0.3_r1/android/widget/DigitalClock.java/?v=source)。 – jul 2012-03-26 18:28:31

0

你是在混淆倍.. 。Handler.postAtTime在啓動(毫秒)後需要幾毫秒,而您提供的是Unix時間戳(自1970年1月1日00:00:00 UTC開始的毫秒數)。

+0

'long now = SystemClock.uptimeMillis();',所以它看起來沒問題。 – jul 2012-03-26 18:24:22