Fragmento que no llama onPause o onStop cuando se usa replace
Tengo este extraño problema de que mis fragmentos no están llamando a ninguno de los métodos de ciclo de vida como onPause y onStop cuando lo reemplazo con otro fragmento. Reemplazo el fragmento como este
public static void replaceFragment(Activity activity, int layoutId, Fragment fragment, String title, String shortTitle) { FragmentTransaction transaction = activity.getFragmentManager().beginTransaction().replace(layoutId, fragment); transaction.addToBackStack(title); transaction.setBreadCrumbTitle(title); transaction.setBreadCrumbShortTitle(shortTitle); transaction.commit(); activity.getFragmentManager().executePendingTransactions(); }
Creo que es de alguna manera mantener mi fragmento vivo, incluso si popBackStack causa después de reemplazar el mismo fragmento de nuevo después de que se han mostrado los anteriores antes de que también llama a la onStop antes onStart?
- Android.support.v4.app.FragmentManager O ¿android.app.FragmentManager?
- Sustitución de fragmentos en una actividad que no llama aAttach, onCreate, onCreateView, etc.
- Aplicar fuerza cerrar en viewPager.setAdapter (adaptador)
- Fragmento con ViewPager dentro de Fragmento y FragmentStatePagerAdapter resultados en Excepción (con ejemplo completo)
- Asyncronious FragmentManager commit
- BetterPickers sin una biblioteca de soporte
- Comprobar si existe un fragmento y reutilizarlo
- GetSupportFragmentManager no compila en DialogFragment
- OnBackStackChanged () se llama dos veces cuando se agrega nuevo fragmento en backstack
- Android onBackStackChanged () no se llama
- ¿Cómo aplastar fragmentos en el backstack que coinciden con su etiqueta de fragmento?
- Comprobando si el estado se ha guardado antes de comprometer un FragmentTransaction
- Cómo agregar / quitar Fragmento en el botón haga clic?
Resolví el problema 🙂
Fue porque mi aplicación en la tableta agregó dos fragmentos en un fragmento principal, y cuando luego reemplazó el fragmento que contiene los dos otros fragmentos de ellos onPause y onStop no se llaman por lo que llaman a sus onStop en los fragmentos principales onStop He resuelto este problema.
Gracias a todos por tratar de ayudarme no sabía que el método que estaba usando was'n realmente el problema, pero que los fragmentos de los niños no se destruyen con sus padres!
Utilizando su código exacto dentro de una clase abstracta, no puedo replicar este problema. He creado una clase abstracta, ReplaceFragment
.
Mi clase Main
extiende FragmentActivity
y configura la vista de contenido del fragmento.
Dentro de la clase Fragmento, configuro un ListView
. Cuando se hace clic en un elemento de la lista, estoy haciendo lo siguiente:
getListView().setItemChecked(index, true); // Check what fragment is currently shown, replace if needed. DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentById(R.id.details); if (details == null || details.getShownIndex() != index) { details = DetailsFragment.newInstance(index); ReplaceFragment.replaceFragment(...); }
Mi salida en LogCat en cada clic es:
10-07 12: 19: 07.688: V / FragmentManager (861): quitar: DetailsFragment {40527d48 # 1 id = 0x7f040003} anidar = 2
10-07 12: 19: 07.688: V / FragmentManager (861): movefrom RESUMED: DetailsFragment {40527d48 # 1 id = 0x7f040003}
10-07 12: 19: 07.688: E / DetailsFragment (861): Detalles onPause ()
10-07 12: 19: 07.688: V / FragmentManager (861): movefrom STARTED: DetailsFragment {40527d48 # 1 id = 0x7f040003}
10-07 12: 19: 07.688: E / DetailsFragment (861): Detalles onStop ()
10-07 12: 19: 07.699: V / FragmentManager (861): movefrom STOPPED: DetailsFragment {40527d48 # 1 id = 0x7f040003}
Publique más detalles de su implementación para que pueda ayudarle más.
- Multidex con Android 2.3 (API 9)
- Pasar los datos de los elementos de los clics hechos por RecyclerView CardView a la actividad