android - Hook 到 fragment 的生命周期,如 Application.ActivityLifecycleCallbacks

标签 android android-fragments fragment

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

我怎样才能为 fragment 完成相同的操作?我认为 Fragments 没有这样的界面,也没有任何明确的地方可以添加它。

也许自定义一个 FragmentHostCallback 创建一个 FragmentController 但我怎样才能为整个应用程序插入它?

用例是一个库,每次 Fragment 调用其生命周期回调并且我不想创建 BaseFragment 时都需要通知它。我只想从应用程序的 onCreate 中被调用,仅此而已(如果可能的话......)。

编辑:

我创建了 an issue in Android Open Source Project关于这个。

最佳答案

自版本 25.2.0在 Android 支持库中,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);
       }
}

关于android - Hook 到 fragment 的生命周期,如 Application.ActivityLifecycleCallbacks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32723055/

相关文章:

android - Google Pay AutoResolveHelper.resolveTask() 没有在 Fragment 中调用 onActivityResult

java - 增强的 for 循环与手动处理对象

android - 使用 log4j 更新 Android Studio 后 gradle 构建出错

java - ListFragment IllegalStateException : “The content of the adapter has changed but ListView did not receive the notification”

android - Commonsware CWAC 切换 fragment

java - Android Java 重新加载刷新 Activity fragment

android - 无法在 android 中从 Fragment 运行 ShowcaseView

安卓键盘 : managing Keyboard appearance/disappearance inside fragments

android - picasso 不显示图像

java - 如何创建Android ICS拖放阴影效果?