在物理后退按钮上取消CountDownTimer按下片段

Faw*_*zan 8 android android-fragments

CountDownTimer在片段中使用a 并试图在用户点击手机中的物理后退按钮时停止它.我试图压倒一切的onPause,onDestroy,onStop,onDestroyView但似乎没有奏效.有点迷失在这里.有人可以给我一个指针吗?

public class Foo extends Fragment {

    CountDownTimer myTimer;

    @Override
    public void onStop() {
        super.onStop();
        myTimer.cancel();
    }

    @Override
    public void onPause() {
        super.onPause();
        myTimer.cancel();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        myTimer.cancel();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        myTimer.cancel();
    }

    @OnClick(R.id.btn_greenleft_no)
    public void goBack() {

        myTimer.cancel();
        Objects.requireNonNull(getActivity()).onBackPressed();
    }

    @OnClick(R.id.btn_greenright_yes)
    public void showSuccess(View view) {

        markAll();
        myTimer.cancel();
        (new MusicPlayer()).playSound(getContext(), "cheers.mp3");

        final Snackbar snackbar = Snackbar.make(snackBarView, R.string.congratulations, Snackbar.LENGTH_SHORT);

        snackbar.show();
        myTimer.cancel();


    }


    private void startTimer(final View view) {

        int Seconds = 5;

        myTimer = new CountDownTimer(Seconds * 1000 + 1000, 1000) {

            public void onTick(long millisUntilFinished) {

                String rem = String.valueOf(millisUntilFinished / 1000);
                    Log.d("APP_DEBUG", "Timer: " + rem);

            }

            public void onFinish() {
                goBack();
                }
        }.start();

    }

}
Run Code Online (Sandbox Code Playgroud)

Sho*_*uri 6

这是我的2美分.片段没有类中存在的onBackPressed()方法Activity.当用户按下物理后退按钮时,它会被调用.这是文档说的:

当活动检测到用户按下后退键时调用.默认实现只是完成当前活动,但您可以覆盖它以执行您想要的任何操作.

您可以做的是覆盖片段onBackPressed()的父活动中的方法Foo,然后使用接口与用户按下后退按钮的片段进行通信.在片段内,您可以使用所需的代码来取消计时器.这个答案在问题中如何实现onBackPressed()的片段?可以帮助您提供示例代码.