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

Oli*_*asc 27 android fragment android-fragments

在Android中,如果你有Application上下文,你可以注册一个Application.ActivityLifecycleCallbacks实例,每当一个Activity经历一个生命周期回调时就会被调用.

如何为片段完成相同的操作?我认为片段没有这样的界面,也没有任何明确的地方我会添加它.

也许定制FragmentHostCallback创建一个FragmentController但是如何为整个应用程序插入?

用例是每次Fragment调用其生命周期回调时都需要通知的库,我不想创建BaseFragment.我想只从应用程序的onCreate调用,就是这样(如果可能的话......).

编辑:

在Android开源项目中创建了一个关于此问题的问题.

Oli*_*asc 25

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

现在,我们可以使用类的一个实例,并在其注册supportFragmentManagerActivity.

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);
       }
}
Run Code Online (Sandbox Code Playgroud)