enzostar Posté(e) 22 septembre 2011 Share Posté(e) 22 septembre 2011 Bonjour, je développe une application Android dans laquelle j'aimerais implémenter un compte à rebours. Pour ce faire, j'utilise la classe CountDownTimer que j'essaie de customizer en mettant en pause par exemple le compteur via un bouton. Voici le code qui pourra peut être vous éclairer d'avantage sur cette erreur qui se produit entre laligne 68 et 82 package com.poker; import android.app.Activity; import android.os.Bundle; import android.os.CountDownTimer; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; public class CountDown extends Activity implements OnClickListener { private TextView tv; private MyCount counter; private Button pause; private Button play; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); tv = new TextView(this); pause = new Button(this); pause.setText("pause"); pause.setOnClickListener(this); play = new Button(this); play.setText("play"); play.setOnClickListener(this); layout.addView(tv); layout.addView(pause); layout.addView(play); this.setContentView(layout); counter = new MyCount(5000, 1000); counter.start(); } 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); } } @Override public void onClick(View v) { if (v==pause) { try { synchronized (counter) { changeButtons(); counter.wait(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else { notifyAll(); } } private void changeButtons(){ pause.setClickable(false); play.setClickable(true); } } Merci pour votre aide Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 22 septembre 2011 Share Posté(e) 22 septembre 2011 Ce sont lesquelles, les lignes 68 à 82 ? Et quelle est l'erreur qui se produit (trace de log de l'exception ) ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
enzostar Posté(e) 23 septembre 2011 Auteur Share Posté(e) 23 septembre 2011 d'après ce que j'ai pu lire de la documentation, un thread bloque toute l'UI. Comment créer un thread qui ne bloque pas l'UI ? J'aimerais pouvoir mettre en pause le thread qui réalise le compte à rebours sans bloquer l'interface utilisateur les lignes 68 à 82 correspondent à ça public void onClick(View v) { if (v==pause) { try { synchronized (counter) { changeButtons(); counter.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } }else { synchronized (counter) { counter.notify(); } } } Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 23 septembre 2011 Share Posté(e) 23 septembre 2011 CountDownTimer n'est pas prévu pour être mis en pause; ton utilisation de wait() ne fait que bloquer le thread UI, avec pour conséquence le message d'erreur que tu as. Pour ton besoin, je pense qu'il faut que tu implémentes toi-même un compteur qui ait cette fonctionnalité de mise en pause; tu peux t'appuyer sur AsyncTask pour la mise en oeuvre, ça doit être faisable assez facilement Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.