2012-09-09 56 views
1

我剛開始學習創建android應用程序。我想創建一個簡單的向下計時器,它從edittext中獲取一個值,但倒數計時器似乎不運行。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(); 
       } 
      } 
    ); 
} 

特別是,該程序只能如果我輸入一個數值,如「CDT =新CountDownTimer(testInt,1000),」 30000中CountDownTimer的第一個參數

能有人開導我,請?謝謝!

+0

什麼是'Log'輸出? – Eric

+0

那麼,它工作與否?你能告訴你logcat嗎?爲什麼不在'new CountDownTimer'中重複使用'interval'變量的值? –

+0

嘗試'Long.parseLong(intervalTxt.getText()。toString())'而不是'Integer.parseInt(intervalTxt.getText()。toString())' –

回答

0

「不行」如何?您應該發佈您收到的錯誤消息或「不起作用」的其他症狀。


可能發生的事情是CountDownTimer只接受長整型值作爲其構造函數的第一個參數。不是int值。

更改int testInt = 30long testLong = 10000.0f看看會發生什麼。

順便說一下,第一個參數意味着毫秒,所以「30」並不會真正讓您獲得更多的好處。

0

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

+0

哦,我的....這是我身邊一個真正愚蠢的錯誤。該程序工作正常,我忘了* 1000的edittext的值,我相信導致倒計時執行得太快。道歉並感謝所有人。 – Sinus