我是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完成吗?我很难找到有关我的特定问题的更多信息。任何帮助表示赞赏!
最佳答案
尝试将按钮实例传递给Timer:
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();
}
});