2016-07-20 18 views
5

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 addToBackStackfalse khi phân đoạn được chọn từ navigationDrawerMenutrue 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?

+0

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

+0

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

+0

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

Trả lời

6

Bạn có thể thêm mã sau đây trước khi bạn thay thế đoạn của mình.

// Replace fragmentCotainer with your container id 
Fragment currentFragment = fragmentManager.findFragmentById(R.id.fragmentCotainer); 
// Return if the class are the same 
if(currentFragment.getClass().equals(fragment.getClass())) return; 
+1

Đó là những gì tôi cần, cảm ơn! – y07k2

Các vấn đề liên quan