1. 程式人生 > >ViewPager+fragment延時載入,懶載入(資料快取)

ViewPager+fragment延時載入,懶載入(資料快取)

今天開發遇到資料快取的問題, ViewPager+2個fragment,大家都知道ViewPager有預載入的功能,每次都會把下一個頁面同時載入,這樣雖然有時很好,但是使用者只需看一個Fragment時,我們就做了一些多餘工作載入了第二個Fragment。在這隻需要取消Fragment的預載入即可,只有當用戶切換到某個Fragment才載入..這樣使用者體驗會好一點,在網上查詢過,LazyViewPager可以實現,但是切換頁面的時候發現都會重新載入, 並沒有把之前載入過的快取起來,這樣效果不理想, 這個念頭打消後變想下一個辦法

首先,介紹兩個方法void setUserVisibleHint(boolean isVisibleToUser)

boolean getUserVisibleHint(),它們分別用作設定/獲得Fragment可見狀態,我們可以重寫Fragment在其中做判斷,程式碼如下:

@Override
	public void setUserVisibleHint(boolean isVisibleToUser) {
		super.setUserVisibleHint(isVisibleToUser);
		if(isVisibleToUser&&isInit)//isInit  預設是false 沒有初始化控制元件過,不然會空指標
		{
			loadData();
		}else {
			isInit=false;//不可見,設定為false 第二次可見的時候不執行載入資料的方法
		}
	}

@Override
	public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
		super.onViewCreated(view, savedInstanceState);
		
		initView(view);
		isInit=true;//初始化後 將其設定成true  表示已經初始化控制元件過了
		
	}

改fragment的 第一次進入走的幾個方法  當然他的其他生命週期的方 法我就不寫了。 setUserVisibleHint() -----》onCreateView()------》
onViewCreate()-----》   在你每次切換fragment的時候,都會呼叫setUserVisbleHint(),當第一次預載入的時候isVisibleToUser=false  isInit=false,執行到onViewCreate()的時候isInit=true,條件不成立,所以不會執行載入資料的方法,當切換切換到這個fragment的時候isVisibleToUser=true了 ,isInit=true, 執行載入資料 ,而當用戶切換上一個fragment的時候 ,會再次呼叫setUserVisibleHint()此時isVisibleToUser=false,會走else方法, isInit=false了 , 再次切換到當前fragment的時候便不會再載入資料,也就實現了延時載入+資料快取的效果了

轉載請註明出處