eventbus发送消息fragment接收不到

我是一个activity容器加载了三个fragment。需求是,外部跳转进activity会传进来一个值,当fragment 1获取到activity接收的值,会发送eventbus 消息, fragment 2 中通过eventbus接收到传递的消息后,会改变一个按钮的状态,现在的问题我在fragment1中通过Intent接收到值以后发送eventbus,fragment 2接收不到。我在activity发送eventbus,fragment2也接收不到,但是在fragment 1通过按钮点击事件发送eventbus,ffragment2 就可以接收到。大佬们能看看问题出在哪里吗,实在搞不出来了

//fragment1

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View inflate = inflater.inflate(R.layout.fragment_map, container, false);
        EventBus.getDefault().register(this);
        mMapView = inflate.findViewById(R.id.map);
        //获取地图对象
        aMap = mMapView.getMap();

        initLocation();
        //初始化地图
        initMap(savedInstanceState);
        
        
        Intent intent = getActivity().getIntent();
        json = intent.getStringExtra("json");
        Button button = inflate.findViewById(R.id.button);


        //接收到父activity 的intent值后发送就接收不到
        if (json != null && !json.equals("")) {

            setImportLine(json);
            Log.i("qqqqq接收到json", "我确实接收到这里了哦");

            EventBus.getDefault().post(EventBusType.ROUTE_START);
        }

        
        //点击按钮发送就可以正常接收
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().post(EventBusType.ROUTE_START);

            }
        });







//fragment2

@Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(EventBusType event) {
        switch (event) {
            case ROUTE_START:
                Glide.with(this).load(R.drawable.execute).into(map_route_execute);

                Log.i("qqqqqqq到这里了6","接收到这里了");
                break;
            case MAP_TYPE_EDIT:
                Glide.with(this).load(R.drawable.route_edit).into(map_route_execute);
                Log.i("qqqqqqq到这里了5","接收到这里了");
                break;
        }

    }

 

正确的做法是,你应该在fragment的onViewCreated生命周期调用EventBus,而不是在onCreateView。前者在视图加载完后调用,后者是加载视图。

你在onCreateView进行Event的post?太早了吧,可能fragment2还没有注册成功。

你先确认fragment1发出事件之前fragment2有没有注册成功。

建议类似这种存在延迟异步等误差情况,使用postSticky(粘性事件,可以等待接受者存在后再相应)而不是使用post直接发送,同理 接受者哪里的注解加上 sticky=true