我有一个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");
}
任何人都可以帮助我吗?谢谢
答案 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