tutorial studio navegar implement how fragments example entre ejemplo dinamicos android android-fragments fragment

android - studio - Conectarse al ciclo de vida del fragmento como Application.ActivityLifecycleCallbacks



how to implement fragments in android studio (3)

En Android, si tiene el contexto de la aplicación, puede registrar una instancia de Application.ActivityLifecycleCallbacks que se llamará cada vez que una Actividad pase por una de sus devoluciones de llamada de ciclo de vida.

¿Cómo puedo lograr lo mismo para los fragmentos? Creo que no hay tal interfaz para Fragmentos ni un lugar claro donde agregaría eso.

Tal vez personalizando un FragmentHostCallback creando un FragmentController pero, ¿cómo puedo conectarlo para toda la aplicación?

El caso de uso es una biblioteca que necesita ser notificada cada vez que un Fragmento llama a sus devoluciones de llamada de ciclo de vida y no quiero crear un BaseFragment. Quiero que me llamen solo desde onCreate de Application y eso es todo (si es posible ...).

EDITAR:

He creado un problema en Android Open Source Project sobre esto.


Bueno, la actividad envía sus devoluciones de llamada para el FragmentManager. Más tarde el administrador de fragmentos despacha las llamadas al Fragmento. No hay lugar para registrar el FragmentLifeCycleCallback en el FragmentManager. Sin embargo, en cualquier momento después de que se inicie el fragmento u puede obtener el estado del fragmento de la variable mState en el fragmento. solo puede rastrear el backstack en el administrador de fragmentos de la siguiente manera:

final FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { Log.i("BACKSTACK","Count" +fragmentManager.getBackStackEntryCount()); } });

Espero que esto ayude.


Desde la versión 25.2.0 de la biblioteca de soporte de Android, la clase FragmentManager.FragmentLifecycleCallbacks es estática y accesible para todos.

Ahora podemos usar una instancia de esa clase y registrarla en el supportFragmentManager de la Activity .

public class ExampleActivity extends AppCompatActivity { public void onCreate(Bundle savedInstaceState) { // initialization code getSupportFragmentManager() .registerFragmentLifecycleCallbacks(new FragmentManager.FragmentLifecycleCallbacks() { @Override public void onFragmentPreAttached(FragmentManager fm, Fragment f, Context context) { super.onFragmentPreAttached(fm, f, context); } @Override public void onFragmentAttached(FragmentManager fm, Fragment f, Context context) { super.onFragmentAttached(fm, f, context); } @Override public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) { super.onFragmentCreated(fm, f, savedInstanceState); } @Override public void onFragmentActivityCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) { super.onFragmentActivityCreated(fm, f, savedInstanceState); } @Override public void onFragmentViewCreated(FragmentManager fm, Fragment f, View v, Bundle savedInstanceState) { super.onFragmentViewCreated(fm, f, v, savedInstanceState); } @Override public void onFragmentStarted(FragmentManager fm, Fragment f) { super.onFragmentStarted(fm, f); } @Override public void onFragmentResumed(FragmentManager fm, Fragment f) { super.onFragmentResumed(fm, f); } @Override public void onFragmentPaused(FragmentManager fm, Fragment f) { super.onFragmentPaused(fm, f); } @Override public void onFragmentStopped(FragmentManager fm, Fragment f) { super.onFragmentStopped(fm, f); } @Override public void onFragmentSaveInstanceState(FragmentManager fm, Fragment f, Bundle outState) { super.onFragmentSaveInstanceState(fm, f, outState); } @Override public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) { super.onFragmentViewDestroyed(fm, f); } @Override public void onFragmentDestroyed(FragmentManager fm, Fragment f) { super.onFragmentDestroyed(fm, f); } @Override public void onFragmentDetached(FragmentManager fm, Fragment f) { super.onFragmentDetached(fm, f); } }, true); } }


Puedes crear una clase como esta, preferirías Singleton

import android.app.Activity; import android.app.Application; import android.app.Fragment; import android.app.FragmentManager; import android.os.Build; import android.os.Bundle; @RequiresApi(api = Build.VERSION_CODES.O) public class PerfLifecycleCallbacks extends FragmentManager.FragmentLifecycleCallbacks implements Application.ActivityLifecycleCallbacks

Tendrá que anular los métodos del ciclo de vida de los Fragmentos, luego puede iniciar esta clase en cualquier lugar que desee. Espero que esto ayude