天天看點

記錄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

初始化中不要去請求資料了