Android 倒数计时器的用户输入
Android User input to countdown timer
我正在开发一个倒数计时器,用户可以输入倒数秒数。
private void showTimer() {
myString = ((EditText)editTextTimer).getText().toString();
int countdownMillis = Integer.parseInt(myString) * 1000;
if (timer != null) {
timer.cancel();
}
timer = new CountDownTimer(countdownMillis, MILLIS_PER_SECOND) {
@Override
public void onTick(long millisUntilFinished) {
((TextView) countdownDisplay).setText("Counting down: " +
millisUntilFinished / MILLIS_PER_SECOND);
((TextView) countdownDisplay).setTextSize(25);
}
@Override
public void onFinish() {
((TextView)countdownDisplay).setText("Time's Up !");
((TextView)countdownDisplay).setTextSize(25);
}
}.start();
}
我正在片段上执行此操作。问题是在我输入时间并单击开始后 "Time's Up" 的文本显示。再次单击开始时,计时器将开始显示和倒计时。计时器有时也会跳过 1 秒。
示例用户插入 10。
它将从 10 、 9 、 7 、 6 、 5 、 4 、 3 、 2 开始倒计时,缺少 1 - 8。
onCreatView
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_countDown, container, false);
countdownDisplay = rootView.findViewById(R.id.txtTimerLeft);
editTextTimer = rootView.findViewById(R.id.txtTimer);
startbutton = rootView.findViewById(R.id.button_start1);
startbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
try {
showTimer();
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
});
return rootView;
}
声明
View editTextTimer;
View startbutton;
private static final int MILLIS_PER_SECOND = 1000;
int SECONDS_TO_COUNTDOWN;
View countdownDisplay;
private CountDownTimer timer;
String myString;
您正在传递 SECONDS_TO_COUNTDOWN * MILLIS_PER_SECOND
并且在第一次尝试时它将为 0,并且您仅在 showTimer
函数内初始化 SECONDS_TO_COUNTDOWN
它。往那边走:
private void showTimer() {
myString = ((EditText)editTextTimer).getText().toString();
int countdownMillis = Integer.parseInt(myString) * 1000;
不要在函数中传递任何内容并从 editText 中读取值。您可以完全删除 SECONDS_TO_COUNTDOWN
。就是这样。
我正在开发一个倒数计时器,用户可以输入倒数秒数。
private void showTimer() {
myString = ((EditText)editTextTimer).getText().toString();
int countdownMillis = Integer.parseInt(myString) * 1000;
if (timer != null) {
timer.cancel();
}
timer = new CountDownTimer(countdownMillis, MILLIS_PER_SECOND) {
@Override
public void onTick(long millisUntilFinished) {
((TextView) countdownDisplay).setText("Counting down: " +
millisUntilFinished / MILLIS_PER_SECOND);
((TextView) countdownDisplay).setTextSize(25);
}
@Override
public void onFinish() {
((TextView)countdownDisplay).setText("Time's Up !");
((TextView)countdownDisplay).setTextSize(25);
}
}.start();
}
我正在片段上执行此操作。问题是在我输入时间并单击开始后 "Time's Up" 的文本显示。再次单击开始时,计时器将开始显示和倒计时。计时器有时也会跳过 1 秒。
示例用户插入 10。 它将从 10 、 9 、 7 、 6 、 5 、 4 、 3 、 2 开始倒计时,缺少 1 - 8。
onCreatView
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_countDown, container, false);
countdownDisplay = rootView.findViewById(R.id.txtTimerLeft);
editTextTimer = rootView.findViewById(R.id.txtTimer);
startbutton = rootView.findViewById(R.id.button_start1);
startbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
try {
showTimer();
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
});
return rootView;
}
声明
View editTextTimer;
View startbutton;
private static final int MILLIS_PER_SECOND = 1000;
int SECONDS_TO_COUNTDOWN;
View countdownDisplay;
private CountDownTimer timer;
String myString;
您正在传递 SECONDS_TO_COUNTDOWN * MILLIS_PER_SECOND
并且在第一次尝试时它将为 0,并且您仅在 showTimer
函数内初始化 SECONDS_TO_COUNTDOWN
它。往那边走:
private void showTimer() {
myString = ((EditText)editTextTimer).getText().toString();
int countdownMillis = Integer.parseInt(myString) * 1000;
不要在函数中传递任何内容并从 editText 中读取值。您可以完全删除 SECONDS_TO_COUNTDOWN
。就是这样。