1. 程式人生 > >Tablayout+Viewpager+Frgment 做Viewapger的快取,並且第一次點選tab都去重新整理,但是第二次之後都有快取且不會自動重新整理可以主動重新整理。Fragment的重新整理

Tablayout+Viewpager+Frgment 做Viewapger的快取,並且第一次點選tab都去重新整理,但是第二次之後都有快取且不會自動重新整理可以主動重新整理。Fragment的重新整理

Tablayout+Viewpager+Frgment 做Viewapger的快取,並且第一次點選tab都去重新整理,但是第二次之後都有快取且不會自動重新整理可以主動重新整理。

需要實現這個首先你需要了解fragment的一個方法

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

}

fragment的這個方法不在fragment的生命週期裡面,當你讓這個fragment顯示的時候為true就會自動呼叫這個方法。

意思就是當我們點選tab按鈕的時候,fragment就會去自動呼叫這個方法,那麼我們是不是直接在這個方法裡面做fragment的重新整理就可以了呢?答案是不行的。

為什麼?因為這個方法會在onCreateVIew之前呼叫,那麼就代表了你獲取到網路資料的時候去更新Ui就會報錯,因為你的

SwipeRefreshLayout或者RecycelrView沒有呼叫findById,沒有繫結控制元件,那麼我們就需要在第一個framgne單獨提出來,其他之後的所有fragmnet都用一個fragment,因為只有第一個framgent才會出現先執行setUserVisibleHint,後執行OnCreateView方法

需要實現主要與以下幾個重要條件:

1、viewPager.setOffscreenPageLimit(list_fragment.size()-1);//快取所有fragment

2、

/**
 * 當這個fragment顯示的時候就去重新整理,就是當你點選tab的時候並且是第一次點選就去重新整理
 *
 * @param isVisibleToUser
 */
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    Log.e("isVisibleToUser", isVisibleToUser + "");
    if (isVisibleToUser && list == null) {//這個頁面是顯示的,並且list==null表示第一次建立的時候才去重新整理,第二次開啟這個//fragment  list就不=null了
        swipeRefresh.setRefreshing(true);
        onRefresh();
    }
}