我刚开始学习创建Android应用程序。我想创建一个简单的倒计时器,它从edittext中获取一个值,但倒数计时器似乎没有运行。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
countDownTxt = (TextView) findViewById(R.id.countDownView);
intervalTxt = (TextView) findViewById(R.id.intervalText);
findViewById(R.id.startBN).setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
int testInt = 30;
//countDownTxt.setText(intervalTxt.getText());
int interval = Integer.parseInt(intervalTxt.getText().toString());
Log.d("buttonpressed", "interval for countdown is " + interval);
cdt = new CountDownTimer(Integer.parseInt(intervalTxt.getText().toString()), 1000) {
public void onTick(long millisUntilFinished) {
Log.d("counttimer1", "haha1");
countDownTxt.setText(""+ millisUntilFinished / 1000);
}
public void onFinish() {
cancel();
}
}.start();
}
}
);
}
特别是,只有在CountDownTimer的第一个参数“cdt = new CountDownTimer(testInt,1000)”中输入30000等数值时,此程序才有效
有人可以开导我吗?谢谢!
答案 0 :(得分:0)
“不起作用”怎么样?您应该发布您收到的错误消息或“不起作用”的其他症状。
可能发生的事情是CountDownTimer只接受长值作为其构造函数的第一个参数。不是int值。
将int testInt = 30
更改为long testLong = 10000.0f
,看看会发生什么。
顺便说一下,第一个参数意味着毫秒,所以“30”实际上并不会让你受益匪浅。
答案 1 :(得分:0)
onTick()方法在单独的Thread中调用。但您没有权利在GUI线程之外使用setText()
方法。
您必须使用Handler对象或Activity.postOnUiThread()
方法在GUI Thread中执行某些操作:
cdt = new CountDownTimer(Integer.parseInt(intervalTxt.getText().toString()), 1000) {
public void onTick(long millisUntilFinished) {
Log.d("counttimer1", "haha1");
runOnUiThread(new Runnable() {
@Override
public void run() {
countDownTxt.setText("" + millisUntilFinished / 1000);
}
});
countDownTxt.setText(""+ millisUntilFinished / 1000);
}
public void onFinish() {
cancel();
}
}.start();
有关更多信息,请阅读http://developer.android.com/guide/components/processes-and-threads.html#Threads