【发布时间】:2014-06-12 20:52:43
【问题描述】:
我有一个用于以分钟为单位输入时间的编辑文本,一个使用在编辑文本中输入的分钟数来启动倒数计时器的按钮,用于更新文本视图,以及一个我想在倒数计时器完成之前取消倒数计时器的按钮.
我遇到的问题是……在我单击开始计时器按钮之前,无法分配倒数计时器所需的变量(毫秒),因为它来自编辑文本。所以我在 onClick 内部为开始计时器按钮创建了倒数计时器。但是...我想要另一个按钮来取消计时器...并且它无法访问倒数计时器。所以这并没有解决任何问题,我对如何做到这一点感到困惑。任何建议都会有所帮助。
编辑:我刚刚意识到我可以将带有侦听器的停止计时器按钮移动到开始计时器按钮 onClick 也...在倒计时计时器下。如果我在开始计时器 onClick 之外有倒计时计时器,我只是对倒计时计时器如何找到毫秒变量感到困惑。我想在倒数计时器下移动停止计时器是可行的……但我仍然觉得我错过了一些东西。
Edit2:我尝试将 countDownTimer 移动到 onCreate 中并使毫秒为全局...但我必须将 countDownTimer 设置为 final 才能使按钮能够使用它,并且 countDownTimer 只是跳到 onFinish。
mTimerTextView = (TextView)findViewById(R.id.timer_text_view);
mTimerEditText = (EditText)findViewById(R.id.timer_edit_text);
mStartTimerButton = (Button)findViewById(R.id.btn_start_timer);
mStartTimerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Getting time in minutes from edit text
int timeEntered = Integer.parseInt(mTimerEditText.getText().toString());
long milliseconds = timeEntered * 60000;
CountDownTimer countDownTimer = new CountDownTimer(milliseconds, 1000) {
@Override
public void onTick(long millisUntilFinished) {
int seconds = (int) (millisUntilFinished / 1000) % 60;
int minutes = (int) ((millisUntilFinished / (1000*60)) % 60);
int hours = (int) ((millisUntilFinished / (1000*60*60)) % 24);
mTimerTextView.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));
}
@Override
public void onFinish() {
new AlertDialog.Builder(DailyGoalActivity.this)
.setTitle("Time's Up")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).show();
}
};
countDownTimer.start();
}
});
mStopTimerButton = (Button)findViewById(R.id.btn_stop_timer);
mStopTimerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// countDownTimer.cancel(); <- How could I do this?
}
});
【问题讨论】: