在Android中,如果你有应用程序上下文,你可以注册一个Application.ActivityLifecycleCallbacks
实例,每当一个Activity经历一个生命周期回调时就会被调用。
如何为片段完成相同的操作?我认为片段没有这样的界面,也没有任何明确的地方我会添加它。
也许自定义FragmentHostCallback
创建FragmentController
但是如何为整个应用程序插入?
用例是每次Fragment调用其生命周期回调时都需要通知的库,而我不想创建BaseFragment。我希望只能通过应用程序的onCreate来调用它(如果可能的话......)。
编辑:
答案 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的生命周期方法,然后您可以根据需要在任何地方初始化此类。希望这会有所帮助