【问题标题】:Android countdown timer wont accept variableAndroid倒数计时器不会接受变量
【发布时间】:2012-09-09 06:07:12
【问题描述】:

我刚开始学习创建 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)时才有效

有人可以请教我吗?谢谢!

【问题讨论】:

  • 那么,它是否有效?你能告诉你 logcat 吗?为什么不在new CountDownTimer 中重用interval 变量的值?
  • 试试Long.parseLong(intervalTxt.getText().toString())而不是Integer.parseInt(intervalTxt.getText().toString())
  • 嗨,我也试过很久了。它不起作用,logcat 如果我使用一个变量它甚至不会进入 onTick()。

标签: android


【解决方案1】:

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


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

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

顺便说一下,第一个参数的意思是毫秒,所以“30”一开始并不会给你带来太多好处。

【讨论】:

    【解决方案2】:

    onTick() 方法在单独的线程中调用。但是您无权在 GUI 线程之外使用 setText() 方法。 您必须使用 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

    【讨论】:

    • 哦,天哪……这对我来说是一个非常愚蠢的错误。该程序运行良好,我忘记将 *1000 设置为 edittext 的值,我认为这会导致倒计时执行得太快。向大家道歉并感谢大家。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多