studio - manual sqlite android pdf
Fragmento todavía existe después de eliminar? (8)
Estaba teniendo el mismo problema. Quité el fragmento usando la etiqueta de la siguiente manera:
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
Fragment fragment = fragmentManager.findFragmentByTag("fragment1");
ft.remove(fragment);
ft.commit();
Ahora findFragmentByTag()
debería devolver null
1 Agrega dos fragmentos a FragmentManager
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 Cambie la configuración móvil Opciones de desarrollador-> No guardar actividades-> ACTIVADO
3 Eliminar todos los fragmentos después de recrear la actividad
FragmentTransaction ft3 = fm.beginTransaction();
for(Fragment f : fm.getFragments()) ft3.remove(f);
ft3.commitAllowingStateLoss();
Mi pregunta es ¿por qué fm.findFragmentByTag ("fragment1") NO es nulo después de eliminar?
minSdkVersion 17 targetSdkVersion 22 compileSdkVersion 22
Prueba este código para eliminar el fragmento.
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove(myFrag);
trans.commit();
manager.popBackStack();
creo que no has agregado este método
manager.popBackStack();
o
getSupportFragmentManager().popBackStack()
Prueba esto...
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();
}
Usted debe commit
transacciones de eliminación de fragmentos individuales.
este código se confirmará después de completar el bucle
for(Fragment f : fm.getFragments()) ft3.remove(f);
ft3.commitAllowingStateLoss();
en lugar de utilizar brackets
for(Fragment f : fm.getFragments()){
ft3.remove(f);
ft3.commitAllowingStateLoss();
}
Utilice el método commitNow
lugar de commitAllowingStateLoss
, ya que realiza la transacción de forma síncrona
en vez de
ft1.add(containerId, fragment1, "fragment1");
tratar
ft1.replace(containerId, fragment1, "fragment1");
y usar el
fragmentmanager.popBackStack();
use popBackStackImmediate()
lugar de popBackStack()
asegurarse de que el fragmento se elimine de la reserva inmediatamente. El método de eliminación de transection no elimina el fragmento del backstack, solo para la transección.
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());
}
}
}