Tôi đang cố gắng tránh thêm các đoạn tương tự để backStack với phương pháp này:Cố gắng tránh thêm cùng một mảnh hai lần để backStack, popBackStackImmediate luôn trả về 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();
}
}
Navigation Drawer chứa: ImageView với profilePhoto
mà mở ProfileMainFragment
và vài các danh mục mở ra MainFragmentCategory
. Boolean addToBackStack
là false
khi phân đoạn được chọn từ navigationDrawerMenu
và true
khi được chọn trong đoạn (di chuyển từ MainFragmentCategory
đến DetialFragmentCategory
) hoặc nhấp vào profilePhoto
trong navigationDrawer
.
fragmentPopped
luôn là false
, tại sao vậy? Ngay cả khi tôi nhấp vào profilePhoto
và một lần nữa profilePhoto
trong navigationDrawer
. Nó nên tránh để thêm nó vào backStack cho một thứ hai (và thứ ba, và thứ tư ...) thời gian, nhưng nó không.
Bất kỳ ý tưởng nào tôi có thể làm cho đúng?
Tôi có thể hỏi những gì bạn đang cố gắng thực hiện để ngăn không cho thêm cùng một đoạn hai lần vào backStack không? BackStack giống như điều hướng histroy. Nếu người dùng đi từ A> B> A> C, người dùng nhấn lại vào C. Anh ấy nên quay lại A thay vì B. – Joshua
Tôi muốn tránh một cái gì đó như thế này: A> B> B> B và làm cho nó trông giống như này: A> B. – y07k2
Cách khi người dùng nhấp vào ngăn kéo, bạn kiểm tra phân đoạn hiện tại. Nếu nó giống nhau, thì đừng thay thế nó. – Joshua