【问题标题】: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】:
onAttach 和 onDetach 的 Fragment 方法怎么样。这些方法在宿主活动中添加、删除或替换片段时调用。
@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】:
您可以使用onAttach 和onDetach,因为onDestroy 在活动被销毁时被调用(执行)。因此,当活动被破坏时,activity 和 fragment 下的 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();
}