美文网首页
EventBus3.0Fragment中使用的问题

EventBus3.0Fragment中使用的问题

作者: JamesYang1624 | 来源:发表于2019-06-12 17:20 被阅读0次

    前言:

           最近使用项目中使用EventBus,其中有一个Activity中使用ViewPager加载三个Fragment,由于存在传值的需求,并没有采用直接getActivity强转get的方式,而是采用EventBus3.0

    出现的问题:

           当前的B Activity获取到上个A Activity传过来的值,B Activity加载了三个Fragment a b c,Fragment中注册EventBus监听:

    注册监听

          Activity中通过post发送消息:

    activity发送消息

    这样运行程序却发现一个问题,我的Fragment始终接收不到消息通知:

    ```

    No subscribers registered for event class com.test.event.QaResultEvent

    ```

    后来在网上查资料很久后才找到原因:

    当前的Fragment属于B Activity,由于Activity post消息的时机是在ViewPager add Fragment之前的,相当于在Fragment的onCreat方法之前,Activity就已经把消息发送出去了,等到Fragment在onCreat中执行register后,无法收到这条消息,这个Event就提示没有注册者监听者!

    eventbus 原理: 先注册接收事件,才能接收别人发送的 postevent。

    但是没关系,eventbus3.0新版本的粘性事件poststicky就可以解决这个问题:

    poststicky 可以使事件消费者在事件发布之后注册的也能接收到该事件

    所以正确的方式应该是这样:

    Activity中发送消息

    然后在Fragment的onEvent方法中也应该这样:

    fragment中的监听方法

    这样,就能正确接收到消息了

    最后:

    还有一个要注意的就是,onEvent方式必须要使用public修饰符,不能使用private,否则你的程序会报错如下:

    ```

    org.greenrobot.eventbus.EventBusException: Subscriber class com.xxx..xxxFragmnet and its super classes have no public methods with the @Subscribe annotation

    ```

    当然,不要忘记了注册和解除注册

    注册监听 解除监听

    以上就是我开发中遇到的小小问题!希望对大家有帮助!!!

    相关文章

      网友评论

          本文标题:EventBus3.0Fragment中使用的问题

          本文链接:https://www.haomeiwen.com/subject/isdmxftx.html