按下按钮后定时器闪烁
timer flicks after button press
我正在尝试在应用程序上放置一个计时器。我正在使用下面的代码,它适用于创建。但是,如果第二次按下按钮,秒数就会开始变得混乱,并且会轻弹一下。
有任何想法吗?
package com.example.android.courtcounter;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
public int counter;
TextView timer;
Button button;
private static final String FORMAT = "%02d:%02d";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
timer = (TextView) findViewById(R.id.timer);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View V) {
new CountDownTimer(2400000, 1000) {
public void onTick(long millisUntilFinished) {
timer.setText (String.format(FORMAT, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
public void onFinish() {
timer.setText("done!");
}
}.start();
}
});
}
}
CountDownTimer 可能在其自身的旧实例上闪烁。在重新开始倒计时之前尝试调用 cancel()。
在整个 Activity
中管理 CountDownTimer
的单个实例。您在同一个 Activity
上有多个实例可能会变得混乱。首先在 onCreate
之外,但在 class 之内,首先将其声明为
CountDownTimer countDownTimer;
然后在您的 Button
的 onClickListener onClick
方法中执行此操作:
if(countDownTimer!=null){
countDownTimer.cancel();
}
countDownTimer= new CountDownTimer(2400000, 1000) {
public void onTick(long millisUntilFinished) {
timer.setText (String.format(FORMAT, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
public void onFinish() {
timer.setText("done!");
}
}.start();
从这里您将只管理 class 的一个实例,而不是在每次单击按钮时创建更多实例。
我正在尝试在应用程序上放置一个计时器。我正在使用下面的代码,它适用于创建。但是,如果第二次按下按钮,秒数就会开始变得混乱,并且会轻弹一下。 有任何想法吗?
package com.example.android.courtcounter;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
public int counter;
TextView timer;
Button button;
private static final String FORMAT = "%02d:%02d";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
timer = (TextView) findViewById(R.id.timer);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View V) {
new CountDownTimer(2400000, 1000) {
public void onTick(long millisUntilFinished) {
timer.setText (String.format(FORMAT, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
public void onFinish() {
timer.setText("done!");
}
}.start();
}
});
}
}
CountDownTimer 可能在其自身的旧实例上闪烁。在重新开始倒计时之前尝试调用 cancel()。
在整个 Activity
中管理 CountDownTimer
的单个实例。您在同一个 Activity
上有多个实例可能会变得混乱。首先在 onCreate
之外,但在 class 之内,首先将其声明为
CountDownTimer countDownTimer;
然后在您的 Button
的 onClickListener onClick
方法中执行此操作:
if(countDownTimer!=null){
countDownTimer.cancel();
}
countDownTimer= new CountDownTimer(2400000, 1000) {
public void onTick(long millisUntilFinished) {
timer.setText (String.format(FORMAT, TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
public void onFinish() {
timer.setText("done!");
}
}.start();
从这里您将只管理 class 的一个实例,而不是在每次单击按钮时创建更多实例。