如何使用NavigationUp关闭应用程序

时间:2019-07-01 22:27:43

标签: android androidx android-architecture-navigation

我正在使用Android导航组件。

在我的HomeFragment内,我要添加一个OnBackPressedCallback

    OnBackPressedCallback callback = new OnBackPressedCallback(true) {
        @Override
        public void handleOnBackPressed() {
            doStuff();
            Navigation.findNavController(view).navigateUp();
        }
    };

    requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);

问题是navigateUp没有关闭应用程序。

我试图弹出堆栈,但没有任何变化。

我该怎么办?

谢谢

1 个答案:

答案 0 :(得分:2)

根据navigateUp() documentationpopBackStack() documentation,都返回一个boolean值,指示:

  

true(如果已弹出堆栈,并且用户已导航到另一个目的地,否则为false

NavController仅控制自己的后堆栈(即您放置在后堆栈上的目的地),并且不包含活动后堆栈或在活动后堆栈上进行操作。

如果您只想在按下后退按钮时总是完成活动,那么直接调用requireActivity().finish()确实是正确的选择。

否则,只有在requireActivity().finish() / popBackStack()返回false的情况下,才应有条件地调用navigateUp()-这表明NavController堆栈上没有其他内容,您需要处理后面的内容堆放自己。