Я пытаюсь избежать добавления тот же фрагмент в backStack с помощью этого метода:Попытка избежать добавить тот же фрагмент дважды backStack, popBackStackImmediate всегда возвращает ложь
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();
}
}
панель навигации содержит: ImageView с profilePhoto
, который открывает ProfileMainFragment
и несколько которые открывается MainFragmentCategory
. Boolean addToBackStack
является false
когда фрагмент выбран из navigationDrawerMenu
и true
, когда выбран в пределах фрагмента (шаг от MainFragmentCategory
к DetialFragmentCategory
) или нажмите profilePhoto
в navigationDrawer
.
fragmentPopped
всегда false
, почему это так? Даже если я нажму profilePhoto
и снова profilePhoto
в navigationDrawer
. Следует избегать добавления его в backStack для второго (и третьего и четвертого ...) времени, но это не так.
Любая идея, как я могу исправить это?
Могу ли я спросить, что вы пытаетесь сделать, чтобы дважды не добавить один и тот же фрагмент в backStack? BackStack похож на навигацию histroy. Если пользователь переходит от A> B> A> C, пользователь нажимает обратно на C. Он должен вернуться к A вместо B. – Joshua
Я хочу избежать чего-то вроде этого: A> B> B> B и заставить его выглядеть это: A> B. – y07k2
Как насчет того, когда пользователь нажимает на ящик, вы проверяете текущее смещение. Если это то же самое, то не заменяйте его. – Joshua