Android开发

AppCompatActivity中监听Fragment的生命周

2019-12-17  本文已影响0人  CarlosLynn

前言

在日常开发中,经常需要使用Fragment,Fragment是依附在Activity而存在的,那么如何在Activity中监听Fragment的生命周期变化呢?

方案

既然Fragment是依附在Activity而存在的,那么我们能否在注册Fragment的生命周期回调呢?
答案是肯定的,我们可以在通过注册FragmentManager.FragmentLifecycleCallbacks来实现Fragment的生命周期回调,该类位于android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks中,属于抽象类.

探索

定义FragmentLifecycleCallbacks的具体实现,并重写其各个方法,打印日志.

private FragmentManager.FragmentLifecycleCallbacks mFragmentLifecycleCallbacks = new FragmentManager.FragmentLifecycleCallbacks() {
    @Override
    public void onFragmentPreAttached(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull Context context) {
        super.onFragmentPreAttached(fm, f, context);
        Log.i(TAG, "onFragmentPreAttached: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentActivityCreated(@NonNull FragmentManager fm, @NonNull Fragment f, @Nullable Bundle savedInstanceState) {
        super.onFragmentActivityCreated(fm, f, savedInstanceState);
        Log.i(TAG, "onFragmentActivityCreated: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentAttached(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull Context context) {
        super.onFragmentAttached(fm, f, context);
        Log.i(TAG, "onFragmentAttached: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentPreCreated(@NonNull FragmentManager fm, @NonNull Fragment f, @Nullable Bundle savedInstanceState) {
        super.onFragmentPreCreated(fm, f, savedInstanceState);
        Log.i(TAG, "onFragmentPreCreated: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentCreated(@NonNull FragmentManager fm, @NonNull Fragment f, @Nullable Bundle savedInstanceState) {
        super.onFragmentCreated(fm, f, savedInstanceState);
        Log.i(TAG, "onFragmentCreated: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentViewCreated(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull View v, @Nullable Bundle savedInstanceState) {
        super.onFragmentViewCreated(fm, f, v, savedInstanceState);
        Log.i(TAG, "onFragmentViewCreated: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentStarted(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentStarted(fm, f);
        Log.i(TAG, "onFragmentStarted: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentResumed(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentResumed(fm, f);
        Log.i(TAG, "onFragmentResumed: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentPaused(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentPaused(fm, f);
        Log.i(TAG, "onFragmentPaused: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentStopped(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentStopped(fm, f);
        Log.i(TAG, "onFragmentStopped: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentSaveInstanceState(@NonNull FragmentManager fm, @NonNull Fragment f, @NonNull Bundle outState) {
        super.onFragmentSaveInstanceState(fm, f, outState);
        Log.i(TAG, "onFragmentSaveInstanceState: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentViewDestroyed(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentViewDestroyed(fm, f);
        Log.i(TAG, "onFragmentViewDestroyed: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentDestroyed(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentDestroyed(fm, f);
        Log.i(TAG, "onFragmentDestroyed: "+f.getClass().getSimpleName());
    }

    @Override
    public void onFragmentDetached(@NonNull FragmentManager fm, @NonNull Fragment f) {
        super.onFragmentDetached(fm, f);
        Log.i(TAG, "onFragmentDetached: "+f.getClass().getSimpleName());
    }
};

Activity创建的时候注册监听

getSupportFragmentManager().registerFragmentLifecycleCallbacks(mFragmentLifecycleCallbacks,true);

Activity销毁的时候注销监听

getSupportFragmentManager().unregisterFragmentLifecycleCallbacks(mFragmentLifecycleCallbacks);

实战

这里我们进入Activity并注册监听后,我们添加两个Fragment,观察日志的输出变化.

DataReportActivity: onFragmentPreAttached: TitleFrag
DataReportActivity: onFragmentAttached: TitleFrag
DataReportActivity: onFragmentPreCreated: TitleFrag
DataReportActivity: onFragmentCreated: TitleFrag
DataReportActivity: onFragmentViewCreated: TitleFrag
DataReportActivity: onFragmentActivityCreated: TitleFrag
DataReportActivity: onFragmentPreAttached: DataReportFarg
DataReportActivity: onFragmentAttached: DataReportFarg
DataReportActivity: onFragmentPreCreated: DataReportFarg
DataReportActivity: onFragmentCreated: DataReportFarg
DataReportActivity: onFragmentViewCreated: DataReportFarg
DataReportActivity: onFragmentActivityCreated: DataReportFarg
DataReportActivity: onFragmentStarted: TitleFrag
DataReportActivity: onFragmentStarted: DataReportFarg
DataReportActivity: onFragmentResumed: TitleFrag
DataReportActivity: onFragmentResumed: DataReportFarg

当我们关闭Activity,观察日志的输出变化

DataReportActivity: onFragmentPaused: TitleFrag
DataReportActivity: onFragmentPaused: DataReportFarg
DataReportActivity: onFragmentStopped: TitleFrag
DataReportActivity: onFragmentStopped: DataReportFarg
DataReportActivity: onFragmentDestroyed: TitleFrag
DataReportActivity: onFragmentDetached: TitleFrag
DataReportActivity: onFragmentViewDestroyed: DataReportFarg
DataReportActivity: onFragmentDestroyed: DataReportFarg
DataReportActivity: onFragmentDetached: DataReportFarg

总结

上一篇下一篇

猜你喜欢

热点阅读