如何在导航到Android中的另一个片段后清除导航堆栈

我正在使用 Android中的新 Navigation Architecture Component,并且在移动到新片段后我被困在清理导航堆栈中.

例:
我在loginFragment中,当我导航到主片段时,我希望从堆栈中清除这个片段,这样当用户按下后退按钮时,用户将不会返回到loginFragment.

我使用简单的NavHostFragment.findNavController(Fragment).navigate(R.id.homeFragment)进行导航.

现行代码

mAuth.signInWithCredential(credential)
            .addOnCompleteListener(getActivity(),new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment);
                    } else {
                        Log.w(TAG,"signInWithCredential:failure",task.getException());
                    }
                }
            });

我尝试在navigate()中使用NavOptions,但后退按钮仍然将我发送回loginFragment

NavOptions.Builder navBuilder = new NavOptions.Builder();
NavOptions navOptions = navBuilder.setPopUpTo(R.id.homeFragment,false).build();   
             NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment,null,navOptions);

解决方法

如果您不想在代码中查看所有模糊内容,只需在操作属性中选中“启动选项”中的“清除任务”即可.

编辑:从Android Studio 3.2 Beta 5开始,“清除任务”在“启动选项”窗口中不再可见,但您仍可以在导航的XML代码中使用它,在操作标记添加

app:clearTask="true"

编辑2:不推荐使用清除任务,官方说明是

This method is deprecated. Use setPopUpTo(int,boolean) with the id of the NavController’s graph and set inclusive to true.

相关文章

Android 通过adb shell命令查看内存,CPU,启动时间,电量等...
Monkey Android app稳定性测试工具之Monkey使用教程 by:授客...
Android 常见adb命令 by:授客 QQ:1033553122 1、 查看所有已...
这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...