2012-10-18 2 views
0

Mon application a plusieurs boutons dont le texte sur eux est un compteur. Chaque bouton avec un compteur différent. Je veux commencer ce que je veux 2 indépendamment. Mon problème est que lorsque j'appuie sur un bouton, tous les autres boutons commencent. J'ai donc plusieurs boutons pour démarrer un compteur quand un seul est pressé. Je sais qu'il existe de nombreuses applications lol pour cela, mais je veux pratiquer sur le codage android: P Je sais que le problème est sur la méthode onTick. Mais je ne sais pas comment appeler plusieurs méthodes onTick pour chaque bouton, ou si j'ai des instructions/switch dans le onTick. Quelqu'un sait comment puis-je faire cela?Démarrer différents boutons temporisateurs dans android

Merci u pour votre temps

public class TimersActivity extends Activity { 

Button wraith, wolf, golem, blue_golem, red_golem, enemy_wraith, enemy_wolf, enemy_golem, enemy_blue_golem, enemy_red_golem, dragon, baron; 

final MyCounter wraithTimer = new MyCounter(50000,100, wraith); 
final MyCounter enemy_wraithTimer = new MyCounter(50000,100, wolf); 

final MyCounter wolfTimer = new MyCounter(60000,100, null); 
final MyCounter enemy_wolfTimer = new MyCounter(60000,100, null); 
final MyCounter golemTimer = new MyCounter(60000,100, null); 
final MyCounter enemy_golemTimer = new MyCounter(60000,100, null); 
final MyCounter blue_golemTimer = new MyCounter(300000,100, null); 
final MyCounter enemy_blue_golemTimer = new MyCounter(300000,100, null); 
final MyCounter red_golemTimer = new MyCounter(300000,100, null); 
final MyCounter enemy_red_golemTimer = new MyCounter(300000,100, null); 
final MyCounter dragonTimer = new MyCounter(360000,100, null); 
final MyCounter baronTimer = new MyCounter(420000,100, null); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_timers); 

     wraith = (Button)findViewById(R.id.wraiths); 
     wolf = (Button)findViewById(R.id.wolfs); 
     golem = (Button)findViewById(R.id.golems); 
     blue_golem = (Button)findViewById(R.id.blue_golem); 
     red_golem = (Button)findViewById(R.id.redbuff_creep); 
     enemy_wraith = (Button)findViewById(R.id.enemy_wraiths); 
     enemy_wolf = (Button)findViewById(R.id.enemy_wolfs); 
     enemy_golem = (Button)findViewById(R.id.enemy_golems); 
     enemy_blue_golem = (Button)findViewById(R.id.enemy_blue_golem); 
     enemy_red_golem = (Button)findViewById(R.id.enemy_redbuff_creep); 
     dragon = (Button)findViewById(R.id.dragon); 
     baron = (Button)findViewById(R.id.baron); 

     wraith.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       wraithTimer.start(); 
      } 
     }); 

    } 

    public enum buttons{wraith,wolf}; 
    public class MyCounter extends CountDownTimer{ 



     public MyCounter(long millisInFuture, long countDownInterval, Button nam) { 
      super(millisInFuture, countDownInterval); 
     } 


     public void onFinish() { 
      wraith.setText("DONE"); 

     } 
     public void onTick(long millisUntilFinished, buttons names) { 

      switch(names){ 

      case wraith: 
       wraith.setText((millisUntilFinished/1000)+""); 
       break; 
      case wolf: 
       wolf.setText((millisUntilFinished/1000)+""); 
       break;   
      } 

     } 


     public void onTick(long millisUntilFinished) { 
      // TODO Auto-generated method stub 

     } 

    } 

} 

Répondre

1

Une option serait d'utiliser énumérations dans la classe MyCounter.

Affectez-le simplement dans le constructeur, puis dans la méthode onTick(), utilisez un commutateur avec le paramètre enum.


modifier:

utilisant le ENUM dans le constructeur signifierait en utilisant ce code dans les initialiseurs:

final MyCounter <name>Timer = new MyCounter(x0000, 100, buttons.wraith); 

Dans votre classe MyCounter ajouter un champ privé dans lequel vous stockez le ENUM comme donc:

private buttons button; 

et dans votre constructeur, affectez l'enum:

public MyCounter(long millisInFutre, long countdownInterval, buttons name) { 
    super(millisInFutre, countdownInterval); 
    this.button = name; 
} 

alors la méthode onTick doit être appelé comme d'habitude:

public void onTick(long millisUntilFinished) { 
    switch(button) { 
    case buttons.wraith: 
     wraith.setText(...); 
     break; 
    } 
} 

espère que vous allez finir cette :)

+0

modifier Ill sur mon codage initial dans mon top après la façon dont ma classe est maintenant . J'ai des erreurs sur la classe MyCounter. Les solutions eclipse me donnent est de faire une autre méthode onTick sans les boutons dans les paramètres. Et l'autre solution est de rendre la classe abstraite. Les deux solutions me donnent plus d'erreurs. – lantonis

+0

Fonctionne comme un charme m8 :) merci beaucoup. vraiment apprécié :) – lantonis

+0

@lantonis n'oubliez pas de marquer une réponse si la question est répondue :). – Destrictor

Questions connexes