lantonis
lantonis

Reputation: 143

Start different button timers in android

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

Answers (1)

Destrictor
Destrictor

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

Related Questions