问题说明:一个Activity中多个fragment中都使用的eventbus去接收发送的事件,造成一个地方post一次,多个fragment去接收并出现多次接收的情况
解决方案一 : 在注册时 判断如果已经注册则不注册 代码如下
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
在onDestroyView()在此方法中去销毁:
@Override
public void onDestroyView() {
super.onDestroyView();
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
}
此方法对我这个不可行;我的项目是一个Activity里面有多个fragment在跳转,并没有直接销毁
mActivity.switchContent(InOutPortDetailShowFragment.this, new AddNewInOutPortFragment());
解决方案二:每个fragment都使用出现了post一次接收两次的情况,只有在后面的fragment使用接口回调了,可以完美解决此问题,(一个Activity和其中的fragment中,尽量只使用一次EventBus去接收事件,避免出现多处多次接收的情况,其余使用接口进行数据传输)
public interface OnItemClickListener<T> {
void onItemClick(T t);
}
@Override
public void onItemClick(Object o) {
if (o instanceof NoDataBean1) {
NoDataBean1 noDataBean1 = (NoDataBean1) o;
if (noDataBean1.getKey().equals("重新填报")) {
mActivity.switchContent(InOutPortDetailShowFragment.this, new AddNewInOutPortFragment());
}
}
}