Używam nowego komponentu architektury nawigacji w systemie Android i utknąłem w czyszczeniu stosu nawigacji po przejściu do nowego fragmentu.
Przykład: Jestem w loginFragment i chcę, aby ten fragment został usunięty ze stosu, kiedy przejdę do fragmentu głównego, aby użytkownik nie powrócił do loginFragmentu po naciśnięciu przycisku Wstecz.
Do nawigacji używam prostego NavHostFragment.findNavController (Fragment) .navigate (R.id.homeFragment) .
Aktualny kod:
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());
}
}
});
Próbowałem użyć NavOptions w nawigacji () , ale przycisk Wstecz nadal odsyła mnie z powrotem do 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);
navigate()metody takiej jak navigate(int resId, Bundle args, NavOptions navOptions)i zapewnić to, NavOptionsco najlepiej pasuje do twojego senario

popBackStacklub nie dodawaćLoginFragmentdo backstack dostarczyćnulldoaddToBackStack(null);i zastąpić ją nowąFragment