连接到Application.ActivityLifecycleCallbacks等片段的生命周期 [英] Hooking into fragment's lifecycle like Application.ActivityLifecycleCallbacks
问题描述
在Android中,如果您有Application上下文,则可以注册一个 Application.ActivityLifecycleCallbacks
实例,每当Activity执行其生命周期回调时就会调用该实例。
我怎样才能完成相同的碎片?我认为Fragments没有这样的接口,也没有任何明确的地方我会补充说。
可能会自定义 FragmentHostCallback
创建 FragmentController
,但如何我可以将它插入整个应用程序吗?
用例是一个库,每次Fragment调用其生命周期回调时都需要通知,而且我不想创建一个BaseFragment。我只想从Application的onCreate中调用,就是这样(如果可能的话)。
编辑:
我在Android开源项目中创建了问题 由于版本 25.2.0 的Android支持库,类 FragmentManager.FragmentLifecycleCallbacks
是对所有人都是静态的。
现在我们可以使用该类的一个实例,并将它注册到的supportFragmentManager
中> Activity 。
public class ExampleActivity extends AppCompatActivity {
$ b $ public void onCreate(Bundle savedInstaceState){
//初始化代码
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);
$ b @Override
public void onFragmentActivityCreated(FragmentManager fm,Fragment f,Bundle savedInstanceState){
super.onFragmentActivityCreated(fm,f,savedInstanceState);
$ b @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);
}
}
In Android, if you have the Application context you can register an Application.ActivityLifecycleCallbacks
instance that will be called everytime an Activity goes through one of its lifecycle callbacks.
How can I accomplish the same for fragments? I think there is no such interface for Fragments nor any clear place where I would add that.
Maybe customizing a FragmentHostCallback
creating a FragmentController
but how can I plug that for the whole application?
The use case is a library that needs to be notified everytime a Fragment calls its lifecycle callbacks and I don't want to create a BaseFragment. I want to be called only from Application's onCreate and that's it (if possible...).
EDIT:
I've created an issue in Android Open Source Project about this.
Since version 25.2.0 of Android support library, the class FragmentManager.FragmentLifecycleCallbacks
is static and accessible to all.
We can now use an instance of that class and register it in the supportFragmentManager
of the Activity
.
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);
}
}
这篇关于连接到Application.ActivityLifecycleCallbacks等片段的生命周期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!