天天看点

记录EventBus在Fragment复用时,发送消息发送多次问题(双层VierPage+TabLayout)

1. 需求

五个tab页面,子页面也有subTab的页面;

父级标题: tab + ViewPager(5个BaseFragment)      父级tab滑动与ViewPager关联的

子级标题:subtab + ViewPager(n个BaseFragment)   子级tab滑动与ViewPager关联的

2. 问题1

有subTab页面,切换子标题没有更新,一直是第一次请求的副标题;数据请求混乱;        

3.错误方案1

 请求数据需要父tab的position,没有传入此position;所以一直是0;

 脑子想到的第一个方法就是 通过父viewPage的selected的监听中,用EventBus去传递position;(现在想想好傻,直接初始化的时候传一个postion就ok,因为这个引发了一堆问题)

但是EventBus订阅的方法在我的复用Fragment中,所以每次发送,会发送给我的五个页面,此时五个页面都走了这个方法,也分不清,具体需要请求哪个页面了,这就是数据混乱的原因(而我此时在订阅方法中还进行了网络请求,各种判断,现在看来很脑残)

4.正确方案1

初始化Fragment时,父级Fragment时,直接传入当前Fragment的position;请求数据需要的父级position问题解决

还有由于VierPager的缓存机制,会默认创建相邻的Fragment,使用的时候尤其注意

5. 问题2

此时请求数据会请求两次

6. 错误方案2

onViewCreated()方法中 初始化请求一次数据
TabLayout.setOnTabSelectedListener()中会请求一次; 标注:首次请求setOnTabSelectedListener也会走
           

7.解决方法2

初始化中不要去请求数据了