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

前端之家收集整理的这篇文章主要介绍了如何在导航到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相关文章