LifeCycleAware片段中的片段生命周期事件

问题描述 投票:8回答:4

我有一个了解生命周期的片段和一个LifecycleObserver

        public class MyFragment extends Fragment {
            @Override
            public void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                new MyObserver(this);

            }

            @Nullable
            @Override
            public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
                return inflater.inflate(R.layout.activity_main, container, false);
            }
        }

以下是我的Observer类,在该类中正确记录了所有片段事件

        public class MyObserver implements LifecycleObserver {
            private static final String TAG = "MyObserver";
            public MyObserver(LifecycleOwner lifecycleOwner) {
                lifecycleOwner.getLifecycle().addObserver(this);
            }

            @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
            public void onCreate(){
                Log.d(TAG, "onCreate: ");
            }

            @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
            public void onPause(){
                Log.d(TAG, "onPause: ");
            }

            @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
            public void onDestroy(){
                Log.d(TAG, "onDestroy: ");
            }

            @OnLifecycleEvent(Lifecycle.Event.ON_START)
            public void onStart(){
                Log.d(TAG, "onStart: ");
            }

        }

我想听片段特定的生命周期事件,例如onDestroyViewonActivityCreated,但这些事件不在其中

Lifecycle.Event。它仅包含活动事件。如何在观察者中监听片段事件

android android-fragments android-lifecycle fragment-lifecycle
4个回答
2
投票

您可以观察片段的viewLifecycleOwner生命周期。

viewLifecycleOwner.lifecycle.addObserver(yourObserverHere)

然后,片段的onDestroyView生命周期方法与@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)注释方法绑定在一起。

请注意,片段的viewLifecycleOwner仅在onCreateViewonDestroyView生命周期方法之间可用。


0
投票

只是对Basim Alamuddin的回答的补充:

您可以在资源代码中看到,当您向@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)添加观察者时,也会调用viewLifecycleOwner:viewLifecycleOwner.lifecycle.addObserver(this)

// androidx.fragment.app.Fragment

void performDestroyView() {
    if (mView != null) {
        mViewLifecycleOwner.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
    }
    onDestroyView();

void performDestroy() {
    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
    onDestroy();

-3
投票

好吧,根据this,从字面上看onDestroyView将在onStop之后被调用。因此,如果您需要逻辑在onDestroyView之前运行或对其进行检测,我认为最好在片段的onStop()方法中对其进行调用或检测。就您而言,我认为您需要为Lifecycle.Event.ON_STOP实现Lifecycle.Event.ON_STARTonActivityCreated

希望它对您有帮助。


-4
投票

Fragment Life Cycle

onCreateView()

被调用以创建与片段关联的视图层次结构。

onDestroyView()

当与片段关联的视图层次结构被删除时调用。

© www.soinside.com 2019 - 2024. All rights reserved.