如何使用navigateUp关闭应用程序

als*_*ora 3 android android-architecture-navigation androidx

我正在使用 Android 导航组件。

在我的 HomeFragment 中,我添加了一个 OnBackPressedCallback

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

    requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
Run Code Online (Sandbox Code Playgroud)

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

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

我该怎么办?

谢谢

ian*_*ake 10

根据navigateUp()文档popBackStack()文档,两者都返回一个boolean值,表明:

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

NavController 只控制它自己的返回堆栈(即,您放置在返回堆栈上的目的地)并且不包含或操作活动返回堆栈。

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

否则,您应该requireActivity().finish()仅在popBackStack()/navigateUp()返回 false 时有条件地调用- 这表明 NavController 后退堆栈上没有其他内容,您需要自己处理后退堆栈。