挂钩到像Application.ActivityLifecycleCallbacks片段的生命周期

在Android中,如果您拥有Application上下文,则可以注册一个Application.ActivityLifecycleCallbacks实例,每当一个Activity经历其生命周期callback之一时,就会调用该实例。

我怎样才能完成相同的碎片? 我认为没有这样的Fragments接口,也没有任何明确的地方我会补充说。

也许自定义一个FragmentHostCallback创build一个FragmentController但我怎么可以插入整个应用程序?

用例是一个库,每次Fragment调用它的生命周期callback时都需要得到通知,而我不想创build一个BaseFragment。 我只想从应用程序的onCreate调用,就是这样(如果可能的话…)。

编辑:

我在Android开放源代码项目中创build了一个关于这个问题。

Solutions Collecting From Web of "挂钩到像Application.ActivityLifecycleCallbacks片段的生命周期"

从Android支持库的版本25.2.0开始 ,类FragmentManager.FragmentLifecycleCallbacks是静态的,可供所有人访问。

我们现在可以使用该类的一个实例,并将其注册到ActivitysupportFragmentManager中。

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

那么这个活动为FragmentManager分派它的callback。 之后,片段pipe理器将调用分派给片段。 在FragmentManager中没有地方注册FragmentLifeCycleCallback。 然而,在片段初始化之后的任何时候,您都可以从片段中的mStatevariables中获取片段状态。 您只能跟踪片段pipe理器中的后台堆栈,如下所示:

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

希望这会有所帮助。