1

我刚开始学习创建 android 应用程序。我想创建一个简单的倒数计时器,它从编辑文本中获取一个值,但倒数计时器似乎没有运行。

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)时,该程序才有效

有人可以启发我吗?谢谢!

4

2 回答 2

0

“不起作用”怎么办?您应该发布您收到的错误消息或“不起作用”的其他症状。


可能发生的情况是 CountDownTimer 只接受长值作为其构造函数的第一个参数。不是 int 值。

更改int testInt = 30long testLong = 10000.0f查看会发生什么。

顺便说一句,第一个参数表示毫秒,所以“30”一开始并不会真正让你受益。

于 2012-09-09T06:17:11.323 回答
0

onTick() 方法在单独的线程中调用。但是您无权使用setText()GUI 线程之外的方法。您必须使用 Handler 对象或Activity.postOnUiThread()方法在 GUI 线程中执行某些操作:

  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

于 2012-09-09T06:24:34.547 回答