2013-05-27 42 views
0

我有一個工作倒計時,但它只從我輸入的硬編碼整數開始倒計數。我希望用戶能夠鍵入一個數字並讓它倒數從那個數字改爲。我希望將放入「timeedit」的文本放入一個字符串並放到「startTime」的值中。從用戶定義的時間量倒計時

編輯:如果下面的代碼是不是你的屏幕上的縮進格式正確,您還可以查看這裏的代碼:http://pastebin.com/BnzEtFX5

代碼:

public class TimerActivity extends Activity implements OnClickListener { 

    private CountDownTimer countDownTimer; 
    private boolean timerHasStarted = false; 
    private Button startB; 
    public TextView text; 
    public String time; 
    private long startTime = 30 * 1000; 
    private final long interval = 1 * 1000; 
    private EditText timeedit; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_countdown); 
     startB = (Button) this.findViewById(R.id.button); 
     startB.setOnClickListener(this); 
     text = (TextView) this.findViewById(R.id.timer); 
     timeedit = (EditText) findViewById(R.id.timeedit); 
     countDownTimer = new MyCountDownTimer(startTime, interval); 
     time = timeedit.getText().toString(); 
     text.setText(time); //+ String.valueOf(startTime/1000) 
    } 

    @Override 
    public void onClick(View v) { 
     if (!timerHasStarted) { 
      countDownTimer.start(); 
      timerHasStarted = true; 
      startB.setText("STOP"); 
     } else { 
      countDownTimer.cancel(); 
      timerHasStarted = false; 
      startTime = 30 * 1000; 
      startB.setText("RESTART"); 
     } 
    } 


    public class MyCountDownTimer extends CountDownTimer { 
     public MyCountDownTimer(long startTime, long interval) { 
      super(startTime, interval); 
     } 

     @Override 
     public void onFinish() { 
      text.setText("Time's up!"); 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      text.setText("" + millisUntilFinished/1000); 
     } 
    } 
} 
+0

哇,你的代碼縮進怎麼了?這真的很難閱讀。 –

+0

@GregHewgill:IntelliJ中的CTRL + ALT + L,問題已解決。 :P – Makoto

+0

@Makoto:當然,對你而言。但是,我已經看到人們實際上嘗試寫入代碼而沒有縮進,而OP需要知道這並不好。 –

回答

1

嗯......我不知道是什麼問題是,但如果我理解正確的話,你只需要做這樣的事情在onCreate()

String userTime = timeedit.getText().toString(); 
startTime = Long.parseLong(userTime); 

編輯

您實際上想要在您的onClick中放置startTimeuserTime。如果它在onCreate()那麼你的EditText將是空的,除非你把一個默認值放在你的xml中,但是不管用戶輸入的是什麼。如果用戶輸入的不是數字字符,還需要用try/catch環繞。

public void onClick(View v) { 
    String userTime = timeedit.getText().toString(); 
    long startTime = Long.parseLong(userTime); 
    if (!timerHasStarted) { 
     countDownTimer.start(); 
     timerHasStarted = true; 
     startB.setText("STOP") 
+0

這是說:無效的數字例外:無效的長:「」 – ThatGuyThere

+0

是的,在我匆忙中,我忘了補充說,你需要做一些錯誤檢查。你可以用try/catch來包圍它,這樣如果'startTime'是一個無效的'long',你可以向用戶顯示一條消息,因爲你會得到空字符串,文本等的異常。 – codeMagic

+0

我編輯過我的答案。對不起,我很困惑 – codeMagic

0

如果你想讓用戶做一些投入,你只要用得到這個:

String userCountDown = timeEdit.getText().toString(); 

然後解析它變成長:

long userStartTime = Long.parseLong(userCountDown); 

,然後,把它傳遞到倒數

countDownTimer = new MyCountDownTimer(UserStartTime, interval); 

但你哈請確保timeEdit中的值是Long值。通過在您的layout.xml文件中將屬性inputType =「number」設置爲R.id.timeedit,您可以確保獲得一個Long。但要確保有輸入,您可以執行任何檢查並向用戶顯示警告。

 if (!timerHasStarted) { 
       String userCountDown = timeEdit.getText().toString(); 
      if(userCountDown.length()<1){ 

       Toast.makeText(yourActivity.this,"PLEASE DO SOME INPUT",Toast.LENGTH_LONG).show(); 
       }else{ 
       long userStartTime = Long.parseLong(userCountDown); 
        countDownTimer = new MyCountDownTimer(userStartTime, interval); 
       countDownTimer.start(); 
       timerHasStarted = true; 
       startB.setText("STOP"); 
      } 
     } else { 

      countDownTimer.cancel(); 
      timerHasStarted = false; 
       startTime = 30*1000; 
       startB.setText("RESTART"); 
     } 
+0

'CountDownTimer'構造函數和方法的'long'值不是'int'。此外,你有一些衝突的情況下,變量名稱 – codeMagic

+0

你是對的,很着急,謝謝 – Opiatefuchs

+0

因此,如果我使用你的代碼,我真的明白(浩浩!),它幾乎可以工作,但由於某種原因,它給了我一個錯誤在哪裏它說「startTime = 30 * 1000」 – ThatGuyThere