Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 倒计时问题_Android_Lifecycle - Fatal编程技术网

Android 倒计时问题

Android 倒计时问题,android,lifecycle,Android,Lifecycle,我使用这个Android类来实现倒计时: 我已创建了自己的类我的计数: public class MyCount extends CountDownTimer{ public MyCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onFinish() { tv_test.setText(""); } @O

我使用这个Android类来实现倒计时:

我已创建了自己的类我的计数:

public class MyCount extends CountDownTimer{

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

@Override
public void onFinish() {
tv_test.setText("");
}

@Override
public void onTick(long millisUntilFinished) {
tv_test.setText("d"+ (millisUntilFinished/(3600000*24))+ " h: "+  (millisUntilFinished/3600000)%24  +" m: " +  (millisUntilFinished/60000) % 60 + " sec: "+   (millisUntilFinished/1000) % 60);

}

}
在我的活动的onStart()中,我有以下代码:

MyCount counter = new MyCount(time, 1000);
        counter.start();
现在的问题是:如果我导航到下一个活动并返回,倒计时将再次启动,并运行两次倒计时

我不能将它放在onCreate()中,因为用户可以更改时间变量。他在其他活动中更改它

尝试添加布尔值 例如:

booelan counterIsLaunched = false;
boolean timeChanged = false;
在计数器的实现中添加以下内容:

@Override
public void onFinish() { tv_test.setText("");
counterIsLaunched = false;
if(timeChanged) start();
}
@Override
public void onTick(long millisUntilFinished) {
tv_test.setText("d"+ (millisUntilFinished/(3600000*24))+ " h: "+  (millisUntilFinished/3600000)%24  +" m: " +  (millisUntilFinished/60000) % 60 + " sec: "+   (millisUntilFinished/1000) % 60);
counterIsLaunched = true;
if(timeChanged) start();
}
在onStart()中,尝试测试变量

if(counter.getCounterIsLaunched() == false ) {
counter.start();
}
当您更改计时器时,请执行以下操作:

counter.getTimeChanged() = true;

希望它能帮助男人:)

@houcine:好主意!我还有一个问题:用户可以通过改变产品的价格来简单地改变计数器。所以我不得不取消计时器并重新安排它。@tobias:我知道如果用户更改了时间,您希望计数器被取消并重新启动,这就是您的意思吗???@houcine:thx!我刚刚将上面的代码添加到我的项目中。但是如果我从其他活动返回,if(counter.getCounterIsLaunched()==false)始终为true。是的,您的最后一个问题是我在结尾想要的:)原因可能是MyCount计数器对象再次创建了?因此,它再次设置“counterIsLaunched=false”。我还尝试添加“MyCount counter”;添加我活动的开始,但它会导致相同的结果behavior@tobias:因此,如果用户更改了时间,请通知您的计数器时间已更改,如果时间已更改,您将再次重新启动计数器:),检查我的响应我已编辑它,希望有帮助,希望这就是你最后想要的:)