2012-11-06 164 views
1

我创建了一个基于我在Google搜索的教程的倒计时器。但我无法恢复倒计时。当我按下按钮时,它将从10重新开始。CountdownTimer暂停和恢复功能

我想创建一个可以暂停和恢复的倒数计时器。谢谢!这里是我的代码:

import android.app.Activity; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class TimerC extends Activity { 
Button btns; 
    TextView tv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_timer_c); 

    btns = (Button)findViewById(R.id.btnstartpause); 
    tv = (TextView)findViewById(R.id.tv); 
    tv.setText("10"); 
    btns.setText("Start"); 

    final MyCounter timer = new MyCounter(10000,1000); 

    btns.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (btns.getText()== "Start") 
      { 
       timer.start(); 

       btns.setText("Pause"); 
      } 
      else if (btns.getText()== "Pause") 
      { 
       btns.setText("Start"); 
       timer.cancel();     
      } 
     } 
    });  
} 

public class MyCounter extends CountDownTimer{ 

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

    @Override 
    public void onFinish() { 
     System.out.println("Timer Completed."); 
     tv.setText("Timer Completed."); 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     tv.setText((millisUntilFinished/1000)+""); 
     System.out.println("Timer : " + (millisUntilFinished/1000)); 
    } 
    } 
} 
+0

我声明了一个整数并将其命名为_remain_,然后当单击该按钮时,我将其余数字保存到_remain_中。点击恢复时,我使用'setText'放回_remain_。那么,它不工作。结果仍然与上面的代码相同。谢谢。 –

+0

在这篇文章中,我提供了一个简单的解决方案来解决这个问题,使用一个CustomCountDownTimer类,它允许你自由地暂停和恢复。 http://stackoverflow.com/questions/36965624/pause-resume-countdowntimer-android/36965625#36965625 希望它能帮助你! –

回答

1

你的问题应该是字符串比较这里:

btns.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (btns.getText()== "Start") 
     { 
      timer.start(); 

      btns.setText("Pause"); 
     } 
     else if (btns.getText()== "Pause") 
     { 
      btns.setText("Start"); 
      timer.cancel();     
     } 
    } 
}); 

因为==操作符referances比较没有价值,您应该使用的Object.Equals(otherObject)。例如:

btns.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (btns.getText().equals("Start")) 
     { 
      timer.start(); 

      btns.setText("Pause"); 
     } 
     else if (btns.getText().equals("Pause")) 
     { 
      btns.setText("Start"); 
      timer.cancel();     
     } 
    } 
}); 
1

保持的millisUntilFinished时间的值在onTick在一个类属性。而当你要重新启动定时器,加上此值作为这样的第一个参数重新初始化它:
编辑:
设置定时器作为类属性:

private MyCounter timer; 

并改变听者这个:

btns.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (btns.getText().equals("Start")) 
     { 
      timer = new MyCounter(remainingTime, 1000); 
      timer.start(); 

      btns.setText("Pause"); 
     } 
     else if (btns.getText().equals("Pause")) 
     { 
      btns.setText("Start"); 
      timer.cancel();     
     } 
    } 
}); 
+0

我使用'long remaining = millisUntilFinished;'保持这个值,并放在'public void onTick(long millisUntilFinished){'。我如何重新实例化为第一个参数?新的在这里,谢谢! –

+0

我编辑了我的答案,告诉你如何去做。 – yDelouis