2016-07-20 17 views
5

kaçınacağımız bu yöntemle backStack aynı parçayı ekleyerek çalışıyorum: ProfileMainFragment ve birkaç açar profilePhoto ile ImageView:backStack için iki kez aynı parçayı eklemek önlemek çalışılıyor, popBackStackImmediate daima 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(); 
     } 
    } 

Navigasyon Çekmece içeriyor MainFragmentCategory'u açan kategoriler. Boolean addToBackStack fragmanı (MainFragmentCategory den DetialFragmentCategory taşımak) parçası olan seçilmiş zaman navigationDrawerMenu ve true arasından seçilmiş ya da navigationDrawer içinde profilePhoto tıklayın zaman false olup.

fragmentPopped her zaman false'dir, neden böyle? ve öğelerini navigationDrawer içinde tıklatsam bile. İkinci (ve üçüncü ve dördüncü) bir zaman için backStack'a eklemekten kaçınmalı, ama yapmadı.

Herhangi bir fikri nasıl doğru yapabilirim?

+0

Aynı parçayı iki kez eklemek için ne yapmaya çalıştığınızı sorabilir miyim? BackStack navigasyon histroy gibidir. Eğer kullanıcı A> B> A> C'den başlıyorsa, kullanıcı C'ye geri döner. B yerine B'ye geri dönmelidir. – Joshua

+0

Böyle bir şeyden kaçınmak istiyorum: A> B> B> B ve Bu: A> B. – y07k2

+0

Kullanıcı çekmeceyi tıklattığında, geçerli fragmanı kontrol edersiniz. Aynı ise, o zaman değiştirmeyin. – Joshua

cevap

6

Parçayı değiştirmeden önce aşağıdaki kodu ekleyebilirsiniz.

// 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

İhtiyacım olan bu, teşekkürler! – y07k2

İlgili konular