2016-01-04 15 views
15

1 Dodaj dwa fragmenty do FragmentManagerFragment nadal istnieje po usunięciu?

FragmentManager fm = getSupportFragmentManager(); 
FragmentTransaction ft1 = fm.beginTransaction(); 
ft1.add(containerId, fragment1, "fragment1"); 
ft1.addToBackStack(null); 
ft1.commitAllowingStateLoss(); 

FragmentTransaction ft2 = fm.beginTransaction(); 
ft2.add(containerId, fragment2, "fragment2"); 
ft2.addToBackStack(null); 
ft2.commitAllowingStateLoss(); 

2 Zmień ustawienia mobilne Developer Opcje-> Nie przechowywać AktywnoĹ> ON

3 Usuń wszystkie fragmenty po działalność została odtworzona

FragmentTransaction ft3 = fm.beginTransaction(); 
for(Fragment f : fm.getFragments()) ft3.remove(f); 
ft3.commitAllowingStateLoss(); 

Moje pytanie brzmi, dlaczego fm.findFragmentByTag ("fragment1") NIE ma wartości NULL po usunięciu?

minSdkVersion 17 targetSdkVersion 22 compileSdkVersion 22

Odpowiedz

7

wypróbować ten kod do usunięcia fragmentu

FragmentManager manager = getActivity().getSupportFragmentManager(); 
FragmentTransaction trans = manager.beginTransaction(); 
trans.remove(myFrag); 
trans.commit(); 
manager.popBackStack(); 

myślę, że nie dodać tej metody

manager.popBackStack(); 

lub

getSupportFragmentManager().popBackStack() 
+0

działa jak uroku! – wonsuc

0

zamiast

ft1.add(containerId, fragment1, "fragment1"); 

próby

ft1.replace(containerId, fragment1, "fragment1"); 

i użyć

fragmentmanager.popBackStack(); 
1

zastosowanie opBackStackImmediate() zamiast popBackStack() które ubezpieczania fragment usunięto z backstack natychmiast. metoda usuwania przecięcia nie usuwa fragmentu z backstacku tylko dla transekcji.

0

powinieneś commit indywidualny fragment usunąć transakcje.

ten kod popełni po pętli pełnej

for(Fragment f : fm.getFragments()) ft3.remove(f); 
ft3.commitAllowingStateLoss(); 

zamiast stosowania brackets

for(Fragment f : fm.getFragments()){ 
ft3.remove(f); 
ft3.commitAllowingStateLoss(); 
} 
0

Spróbuj tego ...

List<Fragment> list = getSupportFragmentManager().getFragments(); 
    if (list == null) { 
     Log.e("TAg", "No existing fragments"); 
    } 

    for (Fragment frag : list) 
    { 
     // To save any of the fragments, add this check. 
     // A tag can be added as a third parameter to the fragment when you commit it 
     if (frag.getTag().equals("tag-name")) { 
      continue; 
     } 

     getSupportFragmentManager().beginTransaction().remove(frag).commit(); 
    } 
0
  public void popAll() { 
      if (mFragmentManager != null) { 
       if (!mOnPause && mFragmentManager.getBackStackEntryCount() > 0) { 
        if (isFragmentOnStack(HomeFragment.TAG_NAME)) 
         mFragmentManager.popBackStackImmediate(HomeFragment.TAG_NAME, 0); 
        else 
         mFragmentManager.popBackStackImmediate(null, 
           FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       } else if (mFragmentManager.getBackStackEntryCount() > 0) { 
        mTransactionList.clear(); 
        mTransactionList.add(new FragmentPopAll()); 
       } 


} 
    } 
Powiązane problemy