【问题标题】:Android NavigationView onDestroy not called未调用 Android NavigationView onDestroy
【发布时间】:2016-11-25 16:00:30
【问题描述】:

我有一个带有导航视图的布局。下面解释视图层次结构,

导航视图> A > A1
导航视图> B

现在,当我在 Fragment A1 中时,如果我通过单击导航视图中的菜单打开 Fragment B 或 Fragment A,则在 Fragment A1 中不会调用 onStop 或 onDestroyView。

我在 Fragment A1 中注册了绿色机器人事件,现在由于未调用 onStop,因此该事件永远不会取消注册。因此,当我再次回到 A1 时,它正在注册一个新事件,并且我得到所有事件两次。

我该如何解决这个问题?

谢谢

【问题讨论】:

标签: android android-fragments android-navigationview event-bus greenrobot-eventbus


【解决方案1】:

onAttachonDetachFragment 方法怎么样。这些方法在宿主活动中添加、删除或替换片段时调用。

@Override
    public void onAttach(Context context) {
        super.onAttach(context);
       //register green-bot event here
    }

@Override
    public void onDetach() {
       //un-register green-bot here
       super.onDetach();
    }

【讨论】:

    【解决方案2】:

    onStop() 不能保证总是被调用。在 onPause() 方法上取消注册您的事件。

    【讨论】:

      【解决方案3】:

      您可能忘记在 onDestory 或 OnDetech() 中调用 EventBus.unregister

      【讨论】:

        【解决方案4】:

        您可以使用onAttachonDetach,因为onDestroy 在活动被销毁时被调用(执行)。因此,当活动被破坏时,activityfragment 下的 onDestroy 代码将被执行。

        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
           //register green-bot event here
        }
        
        @Override
            public void onDetach() {
               //un-register green-bot here
               super.onDetach();
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          • 2015-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-24
          相关资源
          最近更新 更多