2013-07-15 158 views
0

我有问题我在我的应用程序中有一个计时器,当我回到我的主窗口,并返回到计时器活动时,我只想从CountDownTimer恢复计时器的时间,如何这个 ?包不帮我和类似主题:(我会很gratefull任何帮助。Android:恢复恢复时间

public class Timer extends Activity { 
    private boolean start = false; // Semafor to button 
    private Chronometer timer; // Chronometr 
    private CountDownTimer count; // CountDown class 
    private final long startTime = 30 * 1000; // High 
    private final long end = 1 * 1000; //LOw 
    private ImageButton startB; // Button 
    private int VIBRATION_TIME = 1000; //vibration time 
    private Bundle state = new Bundle(); //button state 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_timer); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
      // Show the Up button in the action bar. 
      getActionBar().setDisplayHomeAsUpEnabled(true); 
     } 
     this.timer = ((Chronometer) findViewById(R.id.chronometer1)); 
     count = new MyCountDownTimer(startTime, end); 
     timer.setText("00:" + String.valueOf(startTime/1000)); 
     startB = (ImageButton) this.findViewById(R.id.start_pause); 

     startB.setBackgroundResource(R.drawable.start_button); 
     startB.setOnClickListener(new View.OnClickListener() { 
      // click init 
      @Override 
      public void onClick(View v) { 
       start = !start; 
       if (start == true) { 
        count.start(); // start count 
        startB.setBackgroundResource(R.drawable.stop_button); 
       } else { 
        count.cancel(); // pause count 

        startB.setBackgroundResource(R.drawable.start_button); 
       } 
      } 
     }); 
    } 
    .... 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     start = state.getBoolean("Button"); 

    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     state.putBoolean("Button", start); 
     //count.cancel(); I don't wanna this! 
    } 


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

     @Override 
     public void onFinish() { 
      timer.setText("00:00"); 
      // TO DO : 

      Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
      v.vibrate(VIBRATION_TIME); 
      startB.setBackgroundResource(R.drawable.start_button); 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      long tmp = millisUntilFinished/1000; 
       timer.setText("00:" + tmp); 
     } 
    } 

} 

回答

5

利用onSaveInstanceState。重写此方法,并保存当前的时间到指定的捆绑。然后,在onCreate,从包中提取值并将其应用到你的视图

+0

onCreate and inResume;并且您可以在onRestoreInstanceState中获取savedBundle,当用户返回到您的应用程序时,覆盖这些方法以获取已保存的数据捆绑 –

+0

只要活动未关闭 – kabuto178

+0

Oww感谢您的回答,这非常简单:)非常感谢我将尝试它:) – pkruk

0

嗯是的,这是正确的什么亚历克斯说,但我有新的想法CountDownTimer开始计数,我们点击backButton活动死亡,但CountDownTimer仍然计数,但是当我再次使用这个活动,我可以运行新的计时器,这是疯狂的,有任何方式可以这样做:在create方法中,我们检查CountDownTimer仍在运行,我们只是更新计时器,但如果n我们是否从新创造了一切?现在我的解决方案很棘手:重写onBackPressed()并添加moveTaskToBack(true);但这并没有回到我的主要活动,而是回到了电话屏幕。