在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 中進行網絡請求,是沒有任何影響的