像Application.ActivityLifecycleCallbacks一样陷入片段的生命周期

时间:2015-09-22 17:20:28

标签: android android-fragments fragment

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

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

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

用例是每次Fragment调用其生命周期回调时都需要通知的库,而我不想创建BaseFragment。我希望只能通过应用程序的onCreate来调用它(如果可能的话......)。

编辑:

我已经创建了an issue in Android Open Source Project

3 个答案:

答案 0 :(得分:24)

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

我们现在可以使用该类的实例并将其注册到supportFragmentManager的{​​{1}}。

Activity

答案 1 :(得分:3)

活动调度FragmentManager的回调。稍后片段管理器将调用分派给Fragment。在FragmentManager中没有注册FragmentLifeCycleCallback的地方。但是,在片段初始化之后的任何时候,你都可以从Fragment中的mState变量获得Fragment状态。 您只能跟踪片段管理器中的后台堆栈,如下所示:

        final FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            Log.i("BACKSTACK","Count" +fragmentManager.getBackStackEntryCount());
        }
    });
希望这会有所帮助。

答案 2 :(得分:0)

您可以创建这样的类,最好使用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

您将必须重写Fragments的生命周期方法,然后您可以根据需要在任何地方初始化此类。希望这会有所帮助