@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(HappyEvent event) {
tvHappy.setText(event.getHappy());
}
-
平时 在onCreate中注册时没问题的,今天发现有些特殊情况,Fragment会调用onCreate后不会调用onCreateView |
-
例如ViewPager+Fragment中,如果Fragment已经实例化,那么在Activity在经历onDestroy,onCreate |
-
Fragment也会经历onDestroy,onCreate,然后如果Fragment不在缓存区间,不会调用onCreateView |
-
这样注册的onMessageEvent里处理的事件就会引发空指针 |
更改
@Override
public void onStart() {
super.onStart();
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}