18

我有一个生命周期感知片段和一个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);
            }
        }

以下是我的观察者类,它记录了所有片段事件的属性

        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. 它仅包含活动事件。如何在我的观察者中监听片段事件

4

4 回答 4

13

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

viewLifecycleOwner.lifecycle.addObserver(yourObserverHere)

然后片段的onDestroyView生命周期方法与@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)注释方法相关联。

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

于 2019-02-08T02:23:51.943 回答
0

只是对 Basim Alamuddin 回答的补充:</p>

正如您在资源代码中看到的,@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();
于 2019-10-12T11:57:27.587 回答
-5

好吧,按照这个,字面上onDestroyView会被调用 after onStop。因此,如果您需要在 onDestroyView 或检测到它之前运行逻辑,我认为最好调用它或在片段的 onStop() 方法中检测。在您的情况下,我认为您需要实施Lifecycle.Event.ON_STOP& Lifecycle.Event.ON_STARTfor onActivityCreated.

希望它可以帮助你。

于 2017-11-03T09:30:15.137 回答
-6

片段生命周期

onCreateView()

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

onDestroyView()

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

于 2017-11-03T09:24:05.050 回答