【问题标题】:Fragment lifecycle events in LifeCycleAware FragmentLifeCycleAware Fragment 中的片段生命周期事件
【发布时间】:2017-11-03 09:00:10
【问题描述】:

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

        }

我想收听片段特定的生命周期事件,例如 onDestroyView 和 onActivityCreated,但这些事件不存在

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

【问题讨论】:

  • 你能找到任何关于这个的吗?
  • 我也在试图解决这个问题。你找到解决办法了吗?
  • 有什么方法可以使用生命周期观察器来实现这一点?下面的答案可以在没有生命周期观察者的情况下通过编写我们自己的自定义方法并从片段中调用来实现。

标签: android android-fragments android-lifecycle fragment-lifecycle


【解决方案1】:

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

viewLifecycleOwner.lifecycle.addObserver(yourObserverHere)

然后片段的onDestroyView生命周期方法绑定到@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)注解方法。

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

【讨论】:

  • @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) 当片段被销毁而不是在destroyview中时调用
  • @Shalan93 取决于哪个生命周期,片段生命周期或片段的视图生命周期。
  • 需要澄清
  • @Shalan93 请阅读getViewLifecycleOwner()方法,你会明白的。
  • @Shalan93 检查我的答案以获取有关ON_DESTROY 的更多详细信息
【解决方案2】:

只是对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() 方法中检测。在您的情况下,我认为您需要为onActivityCreated 实施Lifecycle.Event.ON_STOP 和Lifecycle.Event.ON_START。

    希望对你有帮助。

    【解决方案4】:

    Fragment Life Cycle

    onCreateView()
    

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

    onDestroyView()
    

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多