Próbuję unikać dodawania tego samego fragmentu backStack z tą metodą:Próbując uniknąć dodać sam fragment dwukrotnie backStack, popBackStackImmediate zawsze return false
public static void replaceFragment(FragmentManager fragmentManager, Fragment fragment, Boolean addToBackStack) {
String backStateName = fragment.getClass().getName();
boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0);
if (addToBackStack && !fragmentPopped && fragmentManager.findFragmentByTag(backStateName) == null) {
fragmentManager
.beginTransaction()
// .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.fade_in, android.R.anim.fade_out)
.replace(R.id.container, fragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(backStateName) // was 'backStateName'
.commit();
} else {
if (!addToBackStack)
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager
.beginTransaction()
// .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.fade_in, android.R.anim.fade_out)
.replace(R.id.container, fragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.disallowAddToBackStack()
.commit();
}
}
nawigacyjny Szuflada zawiera: ImageView z profilePhoto
który otwiera ProfileMainFragment
i mało kategorie, które otwiera MainFragmentCategory
. Boolean addToBackStack
jest false
gdy fragment wybrane true
navigationDrawerMenu
i gdy jest wybrane w obrębie fragmentu (ruch z MainFragmentCategory
do DetialFragmentCategory
) lub przycisk profilePhoto
w navigationDrawer
.
fragmentPopped
jest zawsze false
, dlaczego tak jest? Nawet jeśli kliknę profilePhoto
i ponownie profilePhoto
w navigationDrawer
. Powinien unikać dodawania go do backStack przez drugi (i trzeci, i czwarty ...) czas, ale tak się nie stało.
Każdy pomysł, jak mogę to naprawić?
Czy mogę zapytać, co próbujesz osiągnąć, aby zapobiec dodaniu tego samego fragmentu dwukrotnie do backStack? BackStack przypomina histaminę nawigacji. Jeśli użytkownik przejdzie z A> B> A> C, użytkownik wróci do C. Powinien wrócić do A zamiast B. – Joshua
Chcę uniknąć czegoś takiego: A> B> B> B i spraw, aby wyglądało jak to: A> B. – y07k2
Co się dzieje, gdy użytkownik kliknie na szufladę, a następnie sprawdzi bieżące przejście. Jeśli jest taki sam, nie zastępuj go. – Joshua