美文网首页Android开发
AppCompatActivity中监听Fragment的生命周

AppCompatActivity中监听Fragment的生命周

作者: CarlosLynn | 来源:发表于2019-12-17 17:13 被阅读0次

    前言

    在日常开发中,经常需要使用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
    

    总结

    相关文章

      网友评论

        本文标题:AppCompatActivity中监听Fragment的生命周

        本文链接:https://www.haomeiwen.com/subject/gtvsnctx.html