2017-06-16 5 views
0

J'essaie de créer une fonction qui affichera du texte à l'écran et disparaîtra après quelques secondes. J'ai réussi cela avec Handler et Timer classes. Le problème est que j'ai besoin de cesser d'exécuter ces minuteries si l'utilisateur fait une entrée sur le clavier avant que le temps de la minuterie passe et réexécute la minuterie pour afficher des données différentes.Interruption de l'exécution du gestionnaire/minuteur si une entrée de l'utilisateur se produit Android

Je suis confronté au problème que la vue reste visible après l'entrée de l'utilisateur et disparaît après 1-2 sec au lieu de 5 sec.

les codes que j'ai utilisé:

//do something 

final Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       //do something again 
      } 
     }, 5000); 
    } 

ET

//do something 
new Timer().schedule(new TimerTask() { 
      @Override 
      public void run() { 
       // this code will be executed after 5 seconds 
       //do something again 
      } 
     }, 5000); 

Pouvez-vous me aider à résoudre ce problème?

THanks

Répondre

1

Pour la minuterie, vous pouvez utiliser timer.cancel(); et gestionnaire vous pouvez utiliser handler.removeCallbacks(runnable); Il suffit donc de déclarer une Runnable runnable comme une variable globale, puis instancier comme ci-dessous

handler.postDelayed(runnable = new Runnable() { 
      @Override 
      public void run() { 
       //do something again 
      } 
     }, 5000); 

c'est le runnable vous allez passer lorsque vous supprimezCallbacks. De même, vous pouvez utiliser ce handler.removeCallbacks(null); cela arrêtera tous les gestionnaires qui ont été déclarés. Je suggérerais que vous déclariez à la fois le gestionnaire et le temporisateur comme variables globales et que vous les instanciez seulement quand vous appelez les tâches de temporisateur.

+0

Merci Gordon, vous avez sauvé mes cheveux: D – hogar