java - 将单击的按钮名称传递给 Android 中的不同类

标签 java android android-intent countdowntimer

我是 android 的新手(不是很喜欢它,但正在努力学习)。

我正在创建一个应用程序,它有许多不同的按钮,当它们被点击时会启动倒数计时器。

在具有这些按钮的 Activity 中,以下代码用于启动计时器:

    //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但是它在当前类中有一个“内部类”(我相信这就是所谓的?)。我的一个 friend 说很少有人这样做,只是创建一个单独的类,例如 CountDown。如果我按照教程中的方式进行操作,我可以让计时器工作(通过在上面写着 *NAMEOFTHEBUTTONCLICKED* 的地方对按钮名称进行硬编码,这意味着它只适用于该按钮) - 但我仍然需要弄清楚如何将按钮名称传递给该类,这样我就不必为每个计时器编写一个单独的类。

这会通过 Extras 完成吗?我很难找到有关我的特定问题的更多信息。感谢您的帮助!!

最佳答案

尝试将按钮实例传递给计时器:

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();
        }
    });

关于java - 将单击的按钮名称传递给 Android 中的不同类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15048319/

相关文章:

java - 将 Intent 转移到 if 语句中

java - 打印 DOC 文件 - Aspose.Words

java - j2me错误: class myClass is public should be declared in a file named myClass. java

java - 我需要同步对象的引用吗?

Android:如何检测当前堆栈的 Activity (任务)是否移至后台?

android - 单击通知不会打开 Android 应用程序

android - 在 Kotlin 中使用 Flowable 的多个 retrofit2 请求

java - 当应用程序在后台时无法从 Intent 中获取额外信息

java - 相对于 Java/Gradle 中的属性文件时找不到文件

android - Android JUnit 测试中的运行时异常