qq_35350549 2021-06-04 08:48 采纳率: 0%
浏览 618

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;
        }

    }
  • 写回答

3条回答 默认 最新

  • qq_1113502097 2021-06-04 14:14
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥20 易康econgnition精度验证
  • ¥15 线程问题判断多次进入
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致