AndroidEventBus icon indicating copy to clipboard operation
AndroidEventBus copied to clipboard

fragment中使用订阅方法的问题

Open maruiwhu opened this issue 10 years ago • 6 comments

如果我有一个fragment中添加一个订阅方法,fragment里面有个请求去拿数据,成功之后使用eventBus将数据post出来 现在我有一个activity,activity里面通过viewpager添加了刚才fragment的3个实例, 这个时候就会每一个fragment都能接收到3次post回来的数据,这样会有问题

所以请问eventbus针对这种fragment重用切当前页面有同一个class的多个实例的情况,post出来怎么区分呢

maruiwhu avatar Jul 14 '15 10:07 maruiwhu

@maruiwhu 这种情况你需要自己通过内部状态来控制是否接收了消息了。

hehonghui avatar Jul 15 '15 07:07 hehonghui

@maruiwhu 目前来看,EventBus不能很好地实现点对点或者叫一对一的通信,AndroidEventBus加了一个Tag,更进一步了,但仍无法适应各种情况,如一个Subscriber有多个对象实例的情况。EventBus本为了解耦,如果为每个post绑定Subscriber的话,又会增加耦合。在你的需求中,如果拿到数据后,你的post是在fragment中发出的,可以将Tag设为fragment对象的hashcode,这样ViewPager中的Fragment就能响应各自的数据请求了

ASPOOK avatar Jul 24 '15 07:07 ASPOOK

我也碰到这样的问题,想让tag唯一,即把hashcode也加到tag字符串中,但是注解有限制必须是常量表达式,没法做到设置tag唯一。后来想了一个办法,在EventBus的源码里增加了一个手动注册事件的接口,这样就可以把tag+hashcode注册进去。@bboyfeiyu 不知道有没有更好的办法。。。

wyfly28 avatar Sep 07 '15 10:09 wyfly28

其实,Event对象里面可以添加一个标识, 在处理的时候, 做个if...else 判断就可以了。

wrongch avatar Nov 25 '15 02:11 wrongch

通过封装event对象来放入区分的条件吧~

wurensen avatar Nov 26 '15 15:11 wurensen

@wurensen 如何进行封装呢,我也遇到了相同的问题

chengzhijun0706 avatar Dec 28 '16 07:12 chengzhijun0706