首页 > 解决方案 > 实现 OnBackPressedCallback 后获取默认 onBackPressed

问题描述

我有一个片段,每当启动 onBackPressed 时,我都会在其中显示一个对话框。我遇到的问题是,在我的片段中实现了 onBackPressed 方法后,MainActivity 中的 onBackPressed 不再有效。如何使我的片段中的 onBackPressed 执行不同的操作,但仍然让 MainActivity on back press 方法正常工作,这样它就不会影响 MainActivity 之上的其他片段。这意味着我不必去每个片段来实现 onBackPressed。我正在使用导航架构组件

下面是我如何在我的片段中实现 onBackPressedCallback


 requireActivity().getOnBackPressedDispatcher().addCallback(requireActivity(),
                new OnBackPressedCallback(true) {
                    @Override
                    public void handleOnBackPressed() {
     
                        new AlertDialog.Builder(requireActivity())
                                .setMessage("You have not finished uploading data")
                                .show();

                    }
                });

下面是我在 MainActivity 中的 onBackPressed 方法,当你点击它两次时调用 onBackPressed 它应该在按下回调之前显示一个 toast


    private static final int BACK_PRESS_TIME_INTERVAL = 2000;
    private long backPressTime;

    @Override
    public void onBackPressed() {

        NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager()
                .findFragmentById(R.id.nav_host_fragment);

        if (navHostFragment != null && navHostFragment.getChildFragmentManager().getBackStackEntryCount() == 0) {

            if (backPressTime + BACK_PRESS_TIME_INTERVAL > System.currentTimeMillis()) {

                super.onBackPressed();

                return;

            } else {

                Toast.makeText(getBaseContext(), "Press back again to exit", Toast.LENGTH_SHORT).show();

            }

            backPressTime = System.currentTimeMillis();

        } else {

            super.onBackPressed();

        }
    }

我遇到的问题是我的片段中的 onBackPressedCallback 覆盖了每个片段的后按,甚至覆盖了我的主要活动中的 onBackPressed 方法。我怎样才能让它只影响我只实现的特定片段

标签: android-studionavigationandroid-architecture-componentsonbackpressed

解决方案


推荐阅读