连接到Application.ActivityLifecycleCallbacks等片段的生命周期 [英] Hooking into fragment's lifecycle like Application.ActivityLifecycleCallbacks

查看:390
本文介绍了连接到Application.ActivityLifecycleCallbacks等片段的生命周期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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



可能会自定义 FragmentHostCallback 创建 FragmentController ,但如何我可以将它插入整个应用程序吗?



用例是一个库,每次Fragment调用其生命周期回调时都需要通知,而且我不想创建一个BaseFragment。我只想从Application的onCreate中调用,就是这样(如果可能的话)。



编辑:



我在Android开源项目中创建了问题 由于版本 25.2.0 的Android支持库,类 FragmentManager.FragmentLifecycleCallbacks 是对所有人都是静态的。

现在我们可以使用该类的一个实例,并将它注册到的supportFragmentManager 中> Activity 。

  public class ExampleActivity extends AppCompatActivity {
$ b $ public void onCreate(Bundle savedInstaceState){

//初始化代码
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);

$ b @Override
public void onFragmentActivityCreated(FragmentManager fm,Fragment f,Bundle savedInstanceState){
super.onFragmentActivityCreated(fm,f,savedInstanceState);

$ b @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);
}
}


In Android, if you have the Application context you can register an Application.ActivityLifecycleCallbacks instance that will be called everytime an Activity goes through one of its lifecycle callbacks.

How can I accomplish the same for fragments? I think there is no such interface for Fragments nor any clear place where I would add that.

Maybe customizing a FragmentHostCallback creating a FragmentController but how can I plug that for the whole application?

The use case is a library that needs to be notified everytime a Fragment calls its lifecycle callbacks and I don't want to create a BaseFragment. I want to be called only from Application's onCreate and that's it (if possible...).

EDIT:

I've created an issue in Android Open Source Project about this.

解决方案

Since version 25.2.0 of Android support library, the class FragmentManager.FragmentLifecycleCallbacks is static and accessible to all.

We can now use an instance of that class and register it in the supportFragmentManager of the 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);
       }
}

这篇关于连接到Application.ActivityLifecycleCallbacks等片段的生命周期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆