2013-02-24 4 views
1

Я новичок в android (и не так горячий, но пытаюсь учиться).Передайте имя кнопки, нажатой на другой класс в Android

Я создаю приложение, в котором есть несколько различных кнопок, которые запускают таймеры обратного отсчета при нажатии.

О деятельности, которая имеет следующие кнопки следующий код используется для запуска таймера:

//Button 1 Start On Click 
    final CountDown buttonOneTimer = new CountDown(15000,1000); 
    buttonOne.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      buttonOneTimer.start(); 
     } 
    }); 

    //Button 2 Start On Click 
    final CountDown buttonTwoTimer = new CountDown(15000,1000); 
    buttonTwo.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      buttonTwoTimer.start(); 
     } 
    }); 

мой класс CountDown выглядит следующим образом:

public class CountDown extends CountDownTimer { 


    public CountDown (long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 


    @Override 
    public void onFinish() { 
     System.out.println("Timer Completed."); 
     ****NAMEOFTHEBUTTONCLICKED****.setText("Timer Completed."); 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     ****NAMEOFTHEBUTTONCLICKED****.setText((millisUntilFinished/1000)+""); 
     System.out.println("Timer : " + (millisUntilFinished/1000)); 
    } 


} 

Я пытаюсь получить имя кнопка нажата в классе, поэтому я могу установить текст на кнопке для обратного отсчета.

Я уверен, что я делаю все виды неправильно или могут быть лучшие способы сделать это, поэтому, если вы видите области, где я мог бы улучшить, не стесняйтесь критиковать меня!

Я читал через tutorial here, но он имеет «внутренний класс» (я считаю, что это то, что он называется?) Внутри текущего класса. Один мой друг сказал, что это очень редко делается, и просто создать отдельный класс, такой как CountDown. Если я сделаю это так же, как в учебнике, я могу заставить таймер работать (путем жесткого кодирования имени кнопок, где указано * NAMEOFTHEBUTTONCLICKED * выше, что означает, что он работает только для этой кнопки) - но мне все еще нужно чтобы выяснить, как передать этот класс именим кнопок, поэтому мне не нужно писать отдельный класс для каждого таймера.

Будет ли это сделано через Extras? Мне было трудно найти более подробную информацию по моей конкретной проблеме. Любая помощь приветствуется!

ответ

1

Попробуйте выдав экземпляр кнопки для таймера:

public class CountDown extends CountDownTimer { 

    Button button; 
    public CountDown (long millisInFuture, long countDownInterval, Button button) { 
     super(millisInFuture, countDownInterval); 
     this.button = button; 
    } 


    @Override 
    public void onFinish() { 
     System.out.println("Timer Completed."); 
     button.setText("Timer Completed."); 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     button.setText((millisUntilFinished/1000)+""); 
     System.out.println("Timer : " + (millisUntilFinished/1000)); 
    } 

} 

Тогда звоните так:

//Button 1 Start On Click 
    final CountDown buttonOneTimer = new CountDown(15000,1000,buttonOne); 
    buttonOne.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      buttonOneTimer.start(); 
     } 
    }); 
+1

Тебя, мой друг победитель! Я знал, что это что-то вроде этого, но я все еще достаточно новый, я просто не знал, как это сделать! Спасибо!! – Hanny

+0

Добро пожаловать :-) –