前因後果:
開發中使用Activity中通過ViewPager嵌套不同的fragment但是有個問題是當傳回Fragment界面時資料沒有實時重新整理,查了很久以為是Fragment中的onResume()方法的問題,最後才知道原理:
Fragment依托于Activity,其内部的OnResume和OnPause方法真正歸屬于其依托的Activity,在Activity可見性變化的時候,才會調用這兩個方法;如果在Activity中包含一個ViewPager + 多個Fragment的結構,在Fragment的切換過程中,因為Activity一直顯示,是以Fragment切換是不會調用OnResume和OnPause方法的,當然第一次建立Fragment的時候是會調用的。
那麼問題來了,我們想要在子Fragment對使用者可見性變化時處理一些邏輯,該怎麼辦呢?
當然是有辦法的!
解決之道:
Fragment中有setUserVisibleHint這個方法,其效果和Activity的OnResume和OnPause方法一樣,那麼我們看下他的使用方法。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//相當于Fragment的onResume,為true時,Fragment已經可見
} else {
//相當于Fragment的onPause,為false時,Fragment不可見
}
}