2012-11-06 137 views
1

我創建了一個基於我在Google搜索的教程的倒計時器。但我無法恢復倒計時。當我按下按鈕時,它將從10重新開始。CountdownTimer暫停和恢復功能

我想創建一個可以暫停和恢復的倒數計時器。謝謝!這裏是我的代碼:

import android.app.Activity; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class TimerC extends Activity { 
Button btns; 
    TextView tv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_timer_c); 

    btns = (Button)findViewById(R.id.btnstartpause); 
    tv = (TextView)findViewById(R.id.tv); 
    tv.setText("10"); 
    btns.setText("Start"); 

    final MyCounter timer = new MyCounter(10000,1000); 

    btns.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (btns.getText()== "Start") 
      { 
       timer.start(); 

       btns.setText("Pause"); 
      } 
      else if (btns.getText()== "Pause") 
      { 
       btns.setText("Start"); 
       timer.cancel();     
      } 
     } 
    });  
} 

public class MyCounter extends CountDownTimer{ 

    public MyCounter(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    @Override 
    public void onFinish() { 
     System.out.println("Timer Completed."); 
     tv.setText("Timer Completed."); 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     tv.setText((millisUntilFinished/1000)+""); 
     System.out.println("Timer : " + (millisUntilFinished/1000)); 
    } 
    } 
} 
+0

我聲明瞭一個整數並將其命名爲_remain_,然後當單擊該按鈕時,我將其餘數字保存到_remain_中。點擊恢復時,我使用'setText'放回_remain_。那麼,它不工作。結果仍然與上面的代碼相同。謝謝。 –

+0

在這篇文章中,我提供了一個簡單的解決方案來解決這個問題,使用一個CustomCountDownTimer類,它允許你自由地暫停和恢復。 http://stackoverflow.com/questions/36965624/pause-resume-countdowntimer-android/36965625#36965625 希望它能幫助你! –

回答

1

你的問題應該是字符串比較這裏:

btns.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (btns.getText()== "Start") 
     { 
      timer.start(); 

      btns.setText("Pause"); 
     } 
     else if (btns.getText()== "Pause") 
     { 
      btns.setText("Start"); 
      timer.cancel();     
     } 
    } 
}); 

因爲==操作符referances比較沒有價值,您應該使用的Object.Equals(otherObject)。例如:

btns.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (btns.getText().equals("Start")) 
     { 
      timer.start(); 

      btns.setText("Pause"); 
     } 
     else if (btns.getText().equals("Pause")) 
     { 
      btns.setText("Start"); 
      timer.cancel();     
     } 
    } 
}); 
1

保持的millisUntilFinished時間的值在onTick在一個類屬性。而當你要重新啓動定時器,加上此值作爲這樣的第一個參數重新初始化它:
編輯:
設置定時器作爲類屬性:

private MyCounter timer; 

並改變聽者這個:

btns.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (btns.getText().equals("Start")) 
     { 
      timer = new MyCounter(remainingTime, 1000); 
      timer.start(); 

      btns.setText("Pause"); 
     } 
     else if (btns.getText().equals("Pause")) 
     { 
      btns.setText("Start"); 
      timer.cancel();     
     } 
    } 
}); 
+0

我使用'long remaining = millisUntilFinished;'保持這個值,並放在'public void onTick(long millisUntilFinished){'。我如何重新實例化爲第一個參數?新的在這裏,謝謝! –

+0

我編輯了我的答案,告訴你如何去做。 – yDelouis