1. 程式人生 > >Fragment延遲載入資料,當頁面可見時再發送請求

Fragment延遲載入資料,當頁面可見時再發送請求

一 起因
我們在做應用的過程中,一個應用的介面可能是多個Fragment切換而成的,Fragment和ViewPager搭配使用時,當ViewPager顯示一個頁面時,它會把前後的頁面也一起載入了,這樣如果是需要傳送請求的頁面,這樣如果使用者都不看那個頁面,它也發了請求,這樣就很費流量了。所以如果在每次應用啟動的時候就去載入大量的網路資料(假設你的每個Fragment都需要載入網路資料,你也可以理解為初始化大量資源)肯定是不好的,能不能有一種方法可以在我們看到我們的Fragment時再去載入對應的Fragment的資料呢?

當然是有的。

二 解決
Fragment雖然有onResume和onPause的,但是這兩個方法是Activity的方法,呼叫時機也是與Activity相同,和ViewPager搭配使用這個方法就很雞肋了,根本不是你想要的效果,這裡介紹一種方法。
你只需要重寫setUserVisibleHint(boolean isVisibleToUser)方法就可以了。


    /**
     * 判斷Fragment頁面是否已經顯示在使用者勉強
     * @param isVisibleToUser
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            //相當於Fragment的onResume
            presenter = new AssetsAndLiabilitiesSubsidiaryPresenter(oThis);
            presenter.sendRequest(new
AssetsAndLiabilitiesSubsidiaryImp()); } else { //相當於Fragment的onPause } }

isVisibleToUser這個引數為true時,說明這個Fragment已經在你的眼前了,這時你再去載入你需要的資料就可以了。