2016-01-04 17 views
15

1 Aggiungi due frammenti di FragmentManagerIl frammento esiste ancora dopo la rimozione?

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 impostazione Cambiamento cellulare Developer Opzioni-> Non tenere Attività-> ON

3 Rimuovere tutti i frammenti dopo l'attività è stata ricreata

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

La mia domanda è perché fm.findFragmentByTag ("fragment1") NON è nulla dopo la rimozione?

minSdkVersion 17 targetSdkVersion 22 compileSdkVersion 22

risposta

7

provare questo codice per rimuovere il frammento

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

Penso che non avete ancora questo metodo

manager.popBackStack(); 

o

getSupportFragmentManager().popBackStack() 
+0

funziona come fascino! – wonsuc

0

invece del

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

prova

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

e usa la

fragmentmanager.popBackStack(); 
1

uso opBackStackImmediate() anziché popBackStack() che assicurano frammento viene rimosso dal backstack immediatamente. il metodo di rimozione delle transizioni non rimuove il frammento dal backstack solo per le transizioni.

0

si dovrebbe commit frammento individuale rimuovere le transazioni.

questo codice commetterà dopo ciclo completo

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

invece di utilizzo brackets

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

Prova questo ...

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


} 
    }