support studio que oncreateview developer cargar and android android-fragments back-stack

android - studio - Fragmento onResume() no llamado cuando se extrae de backstack



fragment deprecated android p (6)

Como ya han dicho otros, onResume() solo se llama cuando se reanuda la actividad en sí, por lo que no va a ayudar en absoluto.

Debe comprobar si está agregando un nuevo fragmento o reemplazando un fragmento existente en su transacción de fragmento:

  • Si replace() un fragmento anterior, ese fragmento anterior se volverá a crear desde cero cuando vuelva a él, por lo que se volverá a llamar a onCreateView() y podrá actualizar el título de la barra de herramientas allí. Probablemente ya lo hagas.

  • Si add() un nuevo fragmento, el fragmento anterior todavía está allí, pero no está visible. Cuando regrese a ella, depende de usted obtener la última entrada de la pila posterior (use getBackStackEntryCount() y getBackStackEntryAt() en el administrador de fragmentos), obtenga el objeto Fragment correspondiente (use findFragmentByTag() en el administrador de fragmentos) , convierta ese Fragmento a alguna clase base de la que todos sus fragmentos heredarán y llame a un método personalizado, por ejemplo, onVisible() , en ese fragmento. La implementación predeterminada de onVisible() en su clase base no hace nada. Reemplace en cada fragmento para actualizar el título de la barra de herramientas, FAB y cualquier otra cosa que sea necesaria. También estoy llamando a onVisible() desde onResume() para evitar la duplicación de código.

Hola, estoy desarrollando una aplicación para Android en la que estoy usando Estoy usando una sola Activity y 3 fragmentos. Entonces, considero que tengo 3 fragmentos AB C. Cuando cambio de A a B, estoy agregando Fragment a Backstack y simillar para B a C. Ahora, cuando hago clic de nuevo en C, me muestra B y similar para B a A también.

Pero lo que pasa es que cuando vengo de C a B o de B a A, no se llama a onResume() ni a ningún otro método del Fragment del ciclo de vida.

Lo que quiero hacer en realidad para cada Fragment tengo un título diferente en ActionBar . Entonces, en mi código, cuando me muevo de A a B o de B a c, estoy cambiando el título de la actividad dentro del fragmento. Pero cuando hago clic en Atrás no cambia según eso.

¿Cuál es el problema real? ¿Por qué después de pop desde backstack no está llamando onResume() para mi Fragment ? ¿Cómo resuelvo este problema? Necesitas ayuda. Gracias.


Intente cambiar el título en onCreateView() de Fragmento.


Intente utilizar el método de replace lugar de add en el FragmentTransaction . Este trabajo para mí:

FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); ft.replace(R.id.fragment_container, fragment); ft.addToBackStack(null); ft.commit();


Pon este código en tu fragmento.

@Override public void setUserVisibleHint(boolean visible) { super.setUserVisibleHint(visible); if (visible && isResumed()) { onResume(); } } @Override public void onResume() { super.onResume(); if (!getUserVisibleHint()) { return; } setData(); }


Puedes usar este método de fragmentación:

@Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); }


onResume() del Fragment se llama solo cuando se reanuda la Activity . Así que esto no te ayudará. Incluso me enfrento a un problema similar en este momento. Puede implementar OnBackStackChangedListener y obtener el nombre del fragmento en la parte superior de la pila y establecer el título de la ActionBar función de eso.

private FragmentManager.OnBackStackChangedListener getListener() { FragmentManager.OnBackStackChangedListener result = new FragmentManager.OnBackStackChangedListener() { public void onBackStackChanged() { FragmentManager manager = getFragmentManager(); if (manager != null) { if(manager.getBackStackEntryCount() >= 1){ String topOnStack = manager.getBackStackEntryAt(manager.getBackStackEntryCount()-1).getName(); Log.i("TOP ON BACK STACK",topOnStack); } } } }; return result; }