2016-01-04 2 views
15

1 Fügen Sie zwei Fragmente zu FragmentManagerFragment existiert noch nach dem Entfernen?

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 Ändern Mobil Entwickler Optionen-> Einstellung nicht halten Aktivitäten-> ON

3 Entfernen Sie alle Fragmente nach Aktivität neu erstellt wurde

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

Meine Frage ist, warum fm.findFragmentByTag ("fragment1") ist NICHT null nach dem Entfernen?

minSdkVersion 17 targetSdkVersion 22 compileSdkVersion 22

Antwort

7

diesen Code versuchen, für das Fragment entfernen

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

Ich glaube, Sie haben diese Methode nicht hinzufügen

manager.popBackStack(); 

oder

getSupportFragmentManager().popBackStack() 
+0

Arbeiten wie Charme Verwendung begehen! – wonsuc

0

anstelle des

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

versuchen

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

und

fragmentmanager.popBackStack(); 
1

Verwendung opBackStackImmediate() anstelle von popBackStack() verwenden, das Fragment aus versichern Backstack sofort entfernt wird. Die Methode "remove" entfernt die Fragmente nicht aus dem Backstack, sondern nur für die Durchtrennung.

0

sollten Sie commit einzelnes Fragment Transaktionen entfernen.

wird dieser Code nach Schleife komplett

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

statt brackets

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

Versuchen ...

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()); 
       } 


} 
    }