Android tabLayout+viewPager+fragment處理懶加載

本篇文章主要解決,在我們切換tabLayout中的fragment時,防止界面被多次調用,接下來,直接貼碼。。。本篇完美解決了這個問題,每次進入界面纔會被調用,也就是隻調用了一次

1.fragment中初始化一個變量

private boolean firstLoad  = false;

2.在fragment的onCreateView中做處理

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.xxx,null);
        
    firstLoad = true;//視圖創建完成,將變量置爲true 

    if (getUserVisibleHint()) {//判斷Fragment是否可見
        //初始化數據
        initDatas();
        firstLoad = false;//將變量置爲false
    }
    return view;
}

3.判斷setUserVisibleHint()是否是第一次進入界面,當退出當前頁面時銷燬

@Override
    public void onDestroyView() {
        super.onDestroyView();
        firstLoad = false;//視圖銷燬將變量置爲false
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (firstLoad && isVisibleToUser) {//視圖變爲可見並且是第一次加載
            //初始化數據
            initDatas();
            firstLoad = false;
        }    
    }

4.初始化數據,做數據處理

//初始化數據
private void initDatas() {

}

最後完整的代碼,下貼:

    public class LoadFragment extends Fragment{
    	private boolean firstLoad  = false;
    
        @Nullable
    	@Override
    	public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {    
        	View view = inflater.inflate(R.layout.xxx,null);
    
       	    firstLoad = true;//視圖創建完成,將變量置爲true 
    
        	if (getUserVisibleHint()) {//判斷Fragment是否可見
            	//初始化數據
            	initDatas();
            	firstLoad = false;//將變量置爲false
        	}
        	return view;
    	}
    }
    
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        firstLoad = false;//視圖銷燬將變量置爲false
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (firstLoad && isVisibleToUser) {//視圖變爲可見並且是第一次加載
            //初始化數據
            initDatas();
            firstLoad = false;
        }    
    }
    
	//初始化數據
 	private void initDatas() {

	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章