Reputation: 143
My app has several buttons which their text on them is a counter. Each button with a different counter. I want to start whichever i want 2 independently. My problem is that when i press one button all the other button counter start. So i have many buttons to start a counter when just one is pressed. I know there are many lol apps for this but i want to practice on coding android:P I know the problem is on the onTick method. But i dont know how to call many onTick methods one for each button, or have if/switch statements inside the onTick. Anyone knows how can i do this?
Thank u for your time
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
}
}
}
Upvotes: 0
Views: 121
Reputation: 752
One option would be to use Enums in the MyCounter class.
Simply assign it in the constructor, then in the onTick() method, use a switch with the enum as parameter.
edit:
using the enum in the constructor would mean using this code in the initializers:
final MyCounter <name>Timer = new MyCounter(x0000, 100, buttons.wraith);
In your MyCounter class add a private field in which you store the enum like so:
private buttons button;
and in your constructor, assign the enum:
public MyCounter(long millisInFutre, long countdownInterval, buttons name) {
super(millisInFutre, countdownInterval);
this.button = name;
}
then the onTick method should be called as usual:
public void onTick(long millisUntilFinished) {
switch(button) {
case buttons.wraith:
wraith.setText(...);
break;
}
}
Hope you'll finish this :)
Upvotes: 1