我在 android 中使用新的 导航架构组件,并且在移动到新片段后我被困在清除导航堆栈中。
示例:我在 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);
原文由 Youssef El Behi 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,将属性
app:popUpTo='your_nav_graph_id'
和app:popUpToInclusive="true"
添加到操作标签。其次,使用上述操作作为参数导航到目的地。
有关更多信息,请参阅 文档。
注意:如果您使用方法
navigate(@IdRes int resId)
进行导航,您将无法获得所需的结果。因此,我使用了方法navigate(@NonNull NavDirections directions)
。