【问题标题】:EventBus is not triggered in fragments android片段android中未触发EventBus
【发布时间】:2017-08-25 21:36:26
【问题描述】:

我在做什么:

我在MainActivity.Java 有一个订阅者

我已经注册OnStart的活动

@Override
    public void onCreate() {
        super.onCreate();
        //Register the event bus for the screen
        EventBus.getDefault().register(this);

    }


@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(BusCategories event) {
        //On Click of Categories Label

}

然后,我在FragmentA 中有一个发布者

EventBus.getDefault().post(new BusCategories(mUploadProducts.getCategories()));

所以 Fragment 中的一个事件是在 main Activity 中触发调用

  1. 这是有效的,但说我在手机中进入省电模式 onPause 被触发并再次返回订阅者永远不会得到 触发
  2. 如何正确处理此问题

【问题讨论】:

  • 我不会订阅onCreate,而是订阅onStartonResume,并且会(分别)取消订阅onStoponPause(取决于您选择哪一个)。
  • @MartinMarconcini 订阅 onStart 或 onResume 如何解决这里的问题?
  • 在我们看到 OP 在这两种方法中所做的事情之前,鉴于提供的信息量,我们无法判断。但是,我仍然会遵循按预期使用生命周期的做法。更不用说我不会使用事件总线开始......
  • @Ritesh ...对不起,我在 OnStop 中取消注册 .... 这就是问题 .... 在 OnDestroy 中取消注册后 ...它的工作 .... 最佳做法是 OnCreate 。 . 注册和 OnDestroy 注销 :)
  • @MartinMarconcini 冷静的人..!!查看他的代码,他已在 onCreate() 中注册,以及如果您在 onStart() 或 Stop() 中执行相同操作,它是如何工作的。我很好奇,所以问,这怎么可能。而且,你应该回答同样的问题,而不是说“这是另一个问题的话题”。是的 onCreate() 和 onDestory() 不是最佳实践,它实际上取决于您的用例,通常注册和取消注册应该发生在 onStart() 和 onStop() 中。我在这里做对了..!!

标签: android android-fragments greenrobot-eventbus


【解决方案1】:

您应该分别在onStartonStop方法或onResumeonPause 方法中处理注册和注销。

【讨论】:

    【解决方案2】:

    在我的情况下,如果您使用 Kotlin,则需要将事件设为可空对象。 例如:

    //this will not tigger by eventbus  
    @Subscribe
    fun onEvent(message Short){
    
    }
    
    
    //but will trigger by event bus  
    @Subscribe
    fun onEvent(message Short?){
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多