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, NavOptions
co najlepiej pasuje do twojego senario
popBackStack
lub nie dodawaćLoginFragment
do backstack dostarczyćnull
doaddToBackStack(null);
i zastąpić ją nowąFragment