2011-05-03 3 views
1

J'utilise le code suivant pour mettre à jour un minuteur dans mon interface utilisateur. Le problème avec ce code cependant, c'est que chaque seconde passée, il met à jour de +1 seconde. Je pense que je comprends pourquoi cela se produit, mais je ne sais pas comment y remédier.Mise à jour du minuteur de l'interface utilisateur du gestionnaire

 private Handler mHandler = new Handler(); 
     .... 


    private Runnable mUpdateTimeTask = new Runnable() { 
      public void run() { 
           mDifference = System.currentTimeMillis() - mStartTime; 
           workSum = workSum + mDifference; 
           TextViewTime.setText("Time so far: " + formatTime(workSum)); 
           mHandler.postDelayed(this, 1000); 

      } 
     }; 

     public void onClick(View v) { 
       switch (v.getId()) { 
       case R.id.start_button: 
       startButton.setEnabled(false); 
       stopButton.setEnabled(true); 

         if (mStartTime == 0L) { 
        mStartTime = System.currentTimeMillis(); 
        mHandler.removeCallbacks(mUpdateTimeTask); 
        mHandler.postDelayed(mUpdateTimeTask, 1000); 
         } 

Une aide serait grandement appréciée!

Répondre

1

workSum = workSum + mDifference; semble être votre problème, car mDifference s'incrémente à chaque fois. Je pense que workSum = mDifference; va le résoudre, ou même

mDifference = System.currentTimeMillis() - mStartTime; 
TextViewTime.setText("Time so far: " + formatTime(mDifference)); 
+0

Belle! Cela a fait l'affaire. En passant par les mathématiques peut vraiment aider il semble;). Merci beaucoup! – Nexis

+0

Vous êtes les bienvenus. – MByD

Questions connexes