前言
在日常开发中,经常需要使用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
网友评论