倒数计时器无法正常工作

时间:2015-06-26 11:19:02

标签: android countdowntimer

我正在尝试使用此timer ...当我致电countDownTimer.start()

我可以在调试器中看到timeleft变量更新为我想要的value=120000但计时器不执行onTick方法。它直接跳到onFinish。但是,如果我给timeLeft一个文字就行了。

    volatile long timeLeft=0;
    CountDownTimer countDownTimer=new CountDownTimer( timeLeft,1000) {
    @Override
    public void onTick(long timeLeft) {
            TextView timeView= (TextView)findViewById(R.id.timer);
    long longTime=(timeLeft / 1000);
    Integer intTime=(int)longTime;// convert long to int
    timeView.setText(String.valueOf(intTime));}

    @Override
    public void onFinish() {correctDialog("Sorry,Time Is Up!!");}};}


    (timeLeft is not fixed)

5 个答案:

答案 0 :(得分:1)

这里CountDownTimer()构造函数中的第一个参数是millisInFuture。您将此值设为0.因此,只要您启动计时器,它就会完成。给出它想要执行10000或20000等时间的时间......

初始化timeleft

volatile long timeLeft=10000;

查看文档CountDownTimer

答案 1 :(得分:1)

尝试这样:

public class MainActivity extends Activity {
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = (TextView) findViewById(R.id.tv);
    CountDownTimer timer = new CountDownTimer(30000, 1000) {
         public void onTick(long millisUntilFinished) {
             int seconds = (int) (millisUntilFinished / 1000);
             tv.setText("seconds remaining: " + String.valueOf(seconds));
         }
         public void onFinish() {
             tv.setText("Finished!!");
         }
      }.start();
}
}

<强> XML: -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />
</RelativeLayout>

我认为这可以解决你的问题。

enter image description here

答案 2 :(得分:0)

您设置timeLeft = 0;这意味着计时器将运行0毫秒。 timeLeft应该等于您希望计时器运行的毫秒数。所以,对于一个30秒的计时器,volatile long timeLeft = 30000;

希望这有帮助

答案 3 :(得分:-2)

CountDownTimer的代码

int tickTime = 1000; //For every second
int finishTime = 30000; //Complete of countdowntimer

TextView yourTextView;

new CountDownTimer(tickTime, finishTime){

    @Override
    public void onTick(long l) {
       Log.i("CountDownTimer", "onTick");
       yourTextView.setText(String.valueOf(l));
    }

    @Override
    public void onFinish() {
       Log.i("CountDownTimer", "onFinish");
    }
}.start();

这个倒数计时器在 onTick()方法中每秒,在 30秒之后,它会出现在 onFinish()< / strong>方法。

完成

答案 4 :(得分:-3)

精确回答问题是,你忘了启动计时器。

即。你错过了countDownTimer.start();