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。就是这样。