fragment 中使用 setUserVisibleHint 懶加載遇到的坑

在viewpager + fragment 聯合使用時,利用setUserVisibleHint進行懶加載時,發現並不適用於view的操作。。。因爲setUserVisibleHint是早於oncreateview之前執行的,所以會報空指針,用一段代碼演示一下


  @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        Log.e("EEEEE","setUserVisibleHint++isVisibleToUser"+isVisibleToUser);
        if (getUserVisibleHint()){//此處不能用isVisibleToUser進行判斷,因爲setUserVisibleHint會執行多次,而getUserVisibleHint纔是判斷真正是否可見的
            Log.e("EEEEE","setUserVisibleHint++getUserVisibleHint"+getUserVisibleHint());
            mDiscoveryRadioGroup.clearCheck();
            initListener();
            if(isPlayMate){
                mGirls.setChecked(true);
                isPlayMate = false;
            }else {
                mDiscovery.setChecked(true);
            }
        }
    }

我在onCreateView  的時候也打了一段Log,但是最後輸出的log是這樣的
09-11 22:37:09.628 8903-8903/com.gogosu.gogosuandroid E/EEEEE: setUserVisibleHint++isVisibleToUserfalse
09-11 22:37:09.628 8903-8903/com.gogosu.gogosuandroid E/EEEEE: setUserVisibleHint++isVisibleToUsertrue
09-11 22:37:09.628 8903-8903/com.gogosu.gogosuandroid E/EEEEE: setUserVisibleHint++getUserVisibleHinttrue


很明顯,setUserVisibleHint這個方法執行了3次,而Fragment的onCreateView還沒有執行就已經報錯退出了,所以我們不能在setUserVisibleHint中對UI進行操作。。。有一個比較次的解決方法,就是增加viewpager的緩存個數,當viewpager進行緩存時,fragment還沒有出現時就已經執行了onCreateview方法,此時,再選中某個fragment時會執行

setUserVisibleHint,並且 getUserVisibleHint是true所以就可以對UI進行操作了。。。
如果只是在
setUserVisibleHint 中進行網絡請求,是沒有任何影響的

發佈了56 篇原創文章 · 獲贊 9 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章