2011-02-02 1 views
5

J'essaie d'utiliser le CountDownTimer dans Android pour obtenir un TextView à compter de 100 à zéro. Je voudrais que cela se produise le plus rapidement possible tout en restant visible. Au moment où l'intervalle count count CountDownTimer est inférieur à 500 ms (je pense que c'était, pourrait avoir été un peu plus faible) alors les mises à jour ne se produisent tout simplement pas.Mise à jour d'Android TextView régulièrement pour afficher le compte à rebours

J'ai seulement essayé ceci sur l'émulateur.

Est-ce que je vais dans le bon sens? Si je le suis, est-ce que cette lenteur apparente est une limitation de l'émulateur ou simplement quelque chose que je vais devoir vivre? Si ce n'est pas la bonne façon, quelqu'un peut-il recommander une approche différente?

Répondre

10

Veuillez vérifier le code exemple suivant à la fois sur l'appareil de l'émulateur &

package com.sample; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.widget.TextView; 

public class SampleTimer extends Activity { 

    TextView tv; // textview to display the countdown 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     tv = new TextView(this); 
     this.setContentView(tv); 

     // 10000 is the starting number (in milliseconds) 
     // 1000 is the number to count down each time (in milliseconds) 

     MyCount counter = new MyCount(10000, 1000); 
     counter.start(); 
    } 


    // countdowntimer is an abstract class, so extend it and fill in methods 
    public class MyCount extends CountDownTimer { 

     public MyCount(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 

     @Override 
     public void onFinish() { 
      tv.setText("done!"); 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      tv.setText("Left: " + millisUntilFinished/1000); 
     } 
    } 
} 
1

Comment faites-vous la mise à jour à l'heure actuelle, est-il sur le thread d'interface utilisateur?

Si vous étiez en train de compter vers le haut plutôt que vers le bas, vous pouvez utiliser le widget UI Chronometer. Ce n'est pas assez flexible pour revenir en arrière, mais peut-être que vous pourriez utiliser its source comme point de départ.