2014-11-21 49 views
0

目前我正在處理一個自定義的CountDownTimer,它接受用戶輸入到EditText視圖,然後倒計時(分鐘和秒)爲0.達到0後,AlertDialog/Notification應該運行。然而,出於某種原因,我似乎無法讓我的活動開展工作。我查看了不同網站上的幾個示例,我似乎無法弄清楚這個問題。如何運行自定義CountDownTimer?

這裏是我的活動(Java)的代碼:http://pastebin.com/mbFaMRdM

這裏是XML:http://pastebin.com/X3yxKFPT

此外,有沒有實行某種反向天文臺表(作爲可視化的方式對於計時器,就像在Android應用程序中一樣)?而不是隻顯示隨秒數和分鐘倒數而更新的文本。

編輯:

我能夠從我的應用程序的主要活動進入活動。雖然,當我在兩個EditText視圖中輸入值(一個EditText中的分鐘數,另一箇中的秒數),然後按下開始按鈕時,沒有任何反應。我認爲,問題出在我的代碼這一部分:

public class setSelfTimeActivity extends MainActivity { 
long mStartTime; 
int mId; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.set_timer_activity); 
} 

public void createTimer() { 
    Button startButton = (Button) findViewById(R.id.start_button); 


    startButton.setOnClickListener(new OnClickListener() { 
     final EditText intervalTxt = (EditText) findViewById(R.id.timer_minutes); 
     final EditText countDownTxt = (EditText) findViewById(R.id.timer_seconds); 
     int time = Integer.parseInt(intervalTxt.getText().toString()) * 1000; 
     @Override 
     public void onClick(View v) { 

     new CountDownTimer(time, 1000) { 

     public void onTick(final long millisUntilFinished) { 


       countDownTxt.setText("CountDown:" + millisUntilFinished/1000); 
      } 

     @Override 
     public void onFinish() { 
      Intent i = new Intent(setSelfTimeActivity.this, 
        PopUpActivity.class); 
      startActivity(i); 
     } 
    }.start(); 
+0

您需要進行一些初步的調試,以便您可以在此發佈**最相關的**代碼,並查看哪些內容未被調用。 – codeMagic 2014-11-21 19:32:07

+0

@codeMagic好的。編輯 – freddiev4 2014-11-21 19:33:09

+0

好得多,謝謝!你可以先刪除'run/runOnUiThread',因爲這個方法已經在UI'Thread'上運行了。你似乎有'countDownTxt.setText(「CountDown:」+ millisUntilFinished/1000)'' – codeMagic 2014-11-21 19:36:07

回答

0

的問題是,你永遠不會調用創建的Listener方法你Button所以點擊Button什麼也不做,因爲沒有連接到事件它。方法調用添加到onCreate()和應該解決這個問題

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.set_timer_activity); 

    // you forgot this guy here 
    createTimer(); 
} 

原來,有在onTick()一些run/runOnUiThread電話,但作爲該方法的UI Thread已經運行,這是沒有必要的。所做的只是增加更多的潛在問題和一些開銷。

CountDownTimer Docs

題外話:

你parsings應該有一些錯誤檢查,如在try/catch

try { 
    int time = Integer.parseInt(intervalTxt.getText().toString()) * 1000; 
} 
catch (Exception e) { 
    // add a message to the user or do something else in case an invalid character was entered 
} 

您需要在解析移動到onClick其包裝或者它會嘗試解析空的EditText內容

@Override 
public void onClick(View v) { 

    // move it in here 
    int time = Integer.parseInt(intervalTxt.getText().toString()) * 1000; 
    new CountDownTimer(time, 1000) { 

    public void onTick(final long millisUntilFinished) { 
+0

哇。我不能相信我忘了那件事。 – freddiev4 2014-11-21 20:22:25

+0

它發生了...花了我一段時間才注意到。快樂的編碼! :) – codeMagic 2014-11-21 20:22:51

+0

編輯:等等,由於某種原因,我的應用程序現在崩潰了。我嘗試啓動Activity,並且Eclipse一直要求我現在打開調試透視圖(當我嘗試啓動setSelfTimerActivity時,我會看到一個黑屏) – freddiev4 2014-11-21 20:24:09