2017-06-01 2 views
0

J'ai une application Android qui devrait émuler une minuterie, le problème est que lorsque j'appuie sur le bouton qui devrait démarrer le minuteur, le CountDownTimer déclenche immédiatement la méthode onFinish, ce qui entraîne une entrée de journal indiquant que le minuteur est terminé et montrant un toast au téléphone. Dows le bouton onClick appel créer et détruire la vue dans l'événement click?Est-ce qu'un Button onClick crée et détruit la vue dans l'événement de cliquer?

Cette méthode est appelée par le bouton:

public void onClick(View v){ 
    numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { 
    @Override 
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 
     timerValue = newVal*1000; 
    } 
     }); 

     new CountDownTimer(timerValue, 1000){ 
      @Override 
      public void onTick(long millisUntilFinished) { 

       Log.i("robeh accadono", String.valueOf(millisUntilFinished/1000)); 

      } 

      @Override 
      public void onFinish() { 
       Toast.makeText(MainActivity.this, "Il timer è arrivato alla fine", Toast.LENGTH_SHORT).show(); 
       Log.i("Fatto!", "finito"); 

      } 
     }.start(); 
    } 

Il semble que lorsque le bouton est pressé la variable timerValue n'est pas affecté du tout

+0

avez-vous essayé d'utiliser un débogueur avec un point de rupture pour comprendre ce qui se passe? – Raghunandan

+0

Oui, et c'est comme si elle réinitialise le timerValue –

Répondre

2

Retirez ce morceau de code de votre événement click et de l'utiliser avant que le bouton clic extrait de code

numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { 
    @Override 
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 
     timerValue = newVal*1000; 
    } 
}); 
+0

Je pensais qu'il aurait dû être dans l'onClick donc il prend la bonne valeur, allez l'essayer maintenant –

0

Salut Nicola il suffit de changer votre code à ceci:

public void onClick (Afficher v) { int timerValue = numberPicker.getValue() * 1000;

new CountDownTimer(timerValue, 1000){ 
     @Override 
     public void onTick(long millisUntilFinished) { 

      Log.e("robeh accadono", String.valueOf(millisUntilFinished/1000)); 

     } 

     @Override 
     public void onFinish() { 
      Toast.makeText(Test.this, "Il timer è arrivato alla fine", Toast.LENGTH_SHORT).show(); 
      Log.e("Fatto!", "finito"); 

     } 
    }.start(); 
} 

Espérons que ça aide !!!