fragment中使用订阅方法的问题
如果我有一个fragment中添加一个订阅方法,fragment里面有个请求去拿数据,成功之后使用eventBus将数据post出来 现在我有一个activity,activity里面通过viewpager添加了刚才fragment的3个实例, 这个时候就会每一个fragment都能接收到3次post回来的数据,这样会有问题
所以请问eventbus针对这种fragment重用切当前页面有同一个class的多个实例的情况,post出来怎么区分呢
@maruiwhu 这种情况你需要自己通过内部状态来控制是否接收了消息了。
@maruiwhu 目前来看,EventBus不能很好地实现点对点或者叫一对一的通信,AndroidEventBus加了一个Tag,更进一步了,但仍无法适应各种情况,如一个Subscriber有多个对象实例的情况。EventBus本为了解耦,如果为每个post绑定Subscriber的话,又会增加耦合。在你的需求中,如果拿到数据后,你的post是在fragment中发出的,可以将Tag设为fragment对象的hashcode,这样ViewPager中的Fragment就能响应各自的数据请求了
我也碰到这样的问题,想让tag唯一,即把hashcode也加到tag字符串中,但是注解有限制必须是常量表达式,没法做到设置tag唯一。后来想了一个办法,在EventBus的源码里增加了一个手动注册事件的接口,这样就可以把tag+hashcode注册进去。@bboyfeiyu 不知道有没有更好的办法。。。
其实,Event对象里面可以添加一个标识, 在处理的时候, 做个if...else 判断就可以了。
通过封装event对象来放入区分的条件吧~
@wurensen 如何进行封装呢,我也遇到了相同的问题