在 Android 中,如果您有 Application 上下文,则可以注册一个 Application.ActivityLifecycleCallbacks
实例,该实例将在每次 Activity 经历其生命周期回调之一时被调用。
我怎样才能为 fragment 完成相同的操作?我认为 Fragments 没有这样的界面,也没有任何明确的地方可以添加它。
也许自定义一个 FragmentHostCallback
创建一个 FragmentController
但我怎样才能为整个应用程序插入它?
用例是一个库,每次 Fragment 调用其生命周期回调并且我不想创建 BaseFragment 时都需要通知它。我只想从应用程序的 onCreate 中被调用,仅此而已(如果可能的话......)。
编辑:
我创建了 an issue in Android Open Source Project关于这个。
最佳答案
自版本 25.2.0在 Android 支持库中,FragmentManager.FragmentLifecycleCallbacks
类是静态的,所有人都可以访问。
我们现在可以使用该类的实例并将其注册到 Activity
的 supportFragmentManager
中。
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);
}
}
关于android - Hook 到 fragment 的生命周期,如 Application.ActivityLifecycleCallbacks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32723055/