Android倒计时器不会接受变量

时间:2012-09-09 06:07:13

标签: android

我刚开始学习创建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等数值时,此程序才有效

有人可以开导我吗?谢谢!

2 个答案:

答案 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