倒计时器返回布尔值

时间:2015-12-10 03:23:26

标签: java android-studio countdowntimer

我有一个Countdown计时器,当我在这里打电话给我班级时我想要​​返回值是我的班级CountdownTimer

  public class CountDownTimerActivity extends CountDownTimer {
    public  boolean finish = false;
    public CountDownTimerActivity(long startTime, long interval) {
        super(startTime, interval);
    }

    @Override
    public  void onFinish()
    {
    finishTime(true);

    }

    @Override
    public void onTick(long millisUntilFinished) {
        finishTime(false);
       Log.e("TESTINg","" + millisUntilFinished/1000);
    }

    public boolean finishTime(boolean finish) {

        return finish;
    }
}

这是我的主叫倒数计时器

  CountDownTimerActivity countdowntimer  = new CountDownTimerActivity(5000,1000);
        countdowntimer.start();
        if(// I DONT KNOW WHAT WILL I PUT HERE)
        {
            Log.e("Testing", "OK na");
        }

任何人都可以帮助我吗?谢谢

4 个答案:

答案 0 :(得分:2)

我认为你想要完成的是计时器到期时的回调?如果是这样,你必须考虑自己运行的计时器,然后在完成时调用另一个方法。例如:

public class Main extends Activity 
    {
    private MyCountDownTimer myCountDownTimer;

    @Override
    public void onCreate(Bundle savedInstanceState){
        myCountDownTimer = new MyCountDownTimer(5000, 1000);
        myCountDownTimer.start();
    }

    public void finished(){
        Log.e("Testing", "OK na");
    }

    public class MyCountDownTimer extends CountDownTimer {
        public MyCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
        }

        @Override
        public void onFinish() { 
            finished();
        }

        @Override
        public void onTick(long millisUntilFinished) {
           Log.e("TESTINg","" + millisUntilFinished/1000);
        }
    }
}

有关详细信息/示例,请参阅此链接: https://androidcookbook.com/Recipe.seam;?recipeId=1205

编辑以制作可用于其他活动的通用类,我会做这样的事情。

在自己的文件中创建一个类似于此的MyCountDownTimer类:

    public class MyCountDownTimer extends CountDownTimer {
        private MyCallback myCallback;

        public MyCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
        }

        public Interface MyCallBack{
            void callback();
        }

        @Override
        public void onFinish() { 
            myCallback.callback();
        }

        @Override
        public void onTick(long millisUntilFinished) {
           Log.e("TESTINg","" + millisUntilFinished/1000);
        }

        public void setMyCallback(MyCallback myCallback){
            this.myCallback = myCallback;
        }
    }

然后,在您的每个活动中,您将实现新界面,如下所示:

public class Main extends Activity implements MyCountDownTimer.MyCallback 
{
    private MyCountDownTimer myCountDownTimer;

    @Override
    public void callback(){
        Log.e("Testing", "OK na");
    }

    @Override
    public void onCreate(Bundle savedInstanceState){
        myCountDownTimer = new MyCountDownTimer(5000, 1000);
        myCountDownTimer.setMyCallback(this); //will use the callback method in this class which can be different for each activity
        myCountDownTimer.start();
    }
}

答案 1 :(得分:1)

我认为您无法从 CountDownTimer 返回值。 理想情况下,您应该启动计时器并在回调方法中实现您必须执行的操作 -

abstract void   onFinish()
//Callback fired when the time is up.

abstract void   onTick(long millisUntilFinished)
//Callback fired on regular interval.

示例实施 https://androidcookbook.com/Recipe.seam;jsessionid=DF53064E03C7505C4EBF727E56E0728E?recipeId=1205

答案 2 :(得分:0)

我认为它不起作用,因为你从未在代码中将变量finish设置为true。你必须将onFinish方法中的代码更改为finish = true然后在onTick方法中放入一个逻辑来检查它是否已经完成然后调用onFinish()方法;

答案 3 :(得分:0)

CountDownTimer是一个非常简单的类,你不需要为它创建一个完整的类,你可以在你的调用者类上创建它,这样你就可以在完成时调用回调函数。

public class MyActivity extends Activity{

    //Other methods and variables

    CountDownTimer countdowntimer  = new CountDownTimer(5000,1000){
        @Override
        public void onFinish() {
            //Call the callback from your activity
        }

        @Override
        public void onTick(long millisUntilFinished) {
            Log.e("TESTINg","" + millisUntilFinished/1000);
        }
    };

}

如果由于某种原因你必须在另一个类中创建它,那么在该类中你必须创建一个你的活动必须实现的接口,并在你的finish方法中调用接口监听器的方法。 像碎片一样:https://stackoverflow.com/a/34192088/2367237