我正在尝试使用此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)
答案 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>
我认为这可以解决你的问题。
答案 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();