2013-10-16 147 views
0

与android工作室我有一个应用程序与CountDownTimer。当我按下一个按钮和一个TextView来计算我在一个按钮上做了多少点击,它从10秒开始到0,到目前为止非常好。我想通过按下另一个按钮重新启动来重新启动此活动。你可以帮我吗?如果它帮助我把代码。重新启动CountDownTimer

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

    txtCount = (TextView)findViewById(R.id.textView1); 
    txtCount.setText(String.valueOf(count)); 
    btnCount = (Button)findViewById(R.id.button1); 
    btnRestart = (Button)findViewById(button2); 

    final boolean[] timerProcessing = {false}; 
    final boolean[] timerStarts = {false}; 

    final TextView textViewTimer = (TextView)findViewById(R.id.textView2); 
    //Saving link to timer object 
    final CountDownTimer timer = new CountDownTimer(10000, 1) { 

     public void onTick(long millisUntilFinished) { 
      textViewTimer.setText("" + millisUntilFinished/1000 
        + ":" + millisUntilFinished % 1000); 
         } 


     public void onFinish() { 
      textViewTimer.setText("0:000"); 
      timerProcessing[0] = false; 
     } 

    }; 

    btnCount.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      //start timer once when button first click 
      if (!timerStarts[0]){ 
       timer.start(); 
       timerStarts[0] = true; 
       timerProcessing[0] = true; 
      } 

      if (timerProcessing[0]){ 
       count++; 
       txtCount.setText(String.valueOf(count)); 
      } 
     } 
    }); 
    btnRestart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { } 
} 

回答

2

只需更换下面的代码:

private TextView txtCount, textViewTimer; 
private Button btnCount, btnRestart; 
int count = 0; 
boolean[] timerProcessing = { false }; 
boolean[] timerStarts = { false }; 
private MyCount timer; 

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

    txtCount = (TextView) findViewById(R.id.textView1); 
    txtCount.setText(String.valueOf(count)); 
    btnCount = (Button) findViewById(R.id.button1); 
    btnRestart = (Button) findViewById(R.id.button2); 

    textViewTimer = (TextView) findViewById(R.id.textView2); 

    timer = new MyCount(10000, 1); 

    btnCount.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      // start timer once when button first click 
      if (!timerStarts[0]) { 
       timer.start(); 
       timerStarts[0] = true; 
       timerProcessing[0] = true; 
      } 

      if (timerProcessing[0]) { 
       count++; 
       txtCount.setText(String.valueOf(count)); 
      } 
     } 
    }); 
    btnRestart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      timerProcessing[0] = true; 
      count = 0; 
      txtCount.setText(String.valueOf(count)); 
      timer.cancel(); 
      timer.start(); 
     } 
    }); 
} 

public class MyCount extends CountDownTimer { 
    public MyCount(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    @Override 
    public void onFinish() { 
     textViewTimer.setText("0:000"); 
     timerProcessing[0] = false; 
    } 

    @Override 
    public void onTick(long millisUntilFinished) { 
     textViewTimer.setText("" + millisUntilFinished/1000 + ":" 
       + millisUntilFinished % 1000); 

    } 
} 

这里您计数器varibale被替换为一个内部类,这样你不需要创建计数器变量每一次。如果你想重新启动计数器,只需创建一次计数器变量并调用它的启动方法。

0

为什么您必须重新启动活动。你需要有一个逻辑,并处理重启按钮onclicklistener。

将您的倒计时代码移动到一个函数中,并从您的活动onCreate/onResume中调用此函数,也可以从重新启动按钮中单击。

1

CountDownTimer包装在一个方法中,然后在您单击重新启动按钮时再次调用它。