Viewpager加載大量圖片的時候卡頓

在viewpager中使用fragment,但是fragment中有大量的圖片,所以每次滑動viewpager的時候由於viewpager的預加載機制,它每次都加載兩頁的數據,所有有時候會卡頓或奔潰,這時候就需要解決
一開始我想的是取消預加載,但是第一太麻煩,第二效果不好,還是會卡頓,所以上網找了一些方法,終於感覺有個不錯的,就是用setUserVisibleHint,這是fragment的一個方法,就是在fragment顯示的時候調用,我們可以把加載數據的請求放在這裏面,這樣viewpager預加載的時候只是記載的視圖,但是不加載數據,這樣就不卡頓啦,這個方法相當於Resume,代碼如下:

 public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        isCreate = true;
 }

public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser&&isCreate) {
//可見時加載數據相當於Fragment的onResume
}else{
//不可見是不加載數據
}
}

當然,只這樣做的話第一頁有時候加載不出來,或者,viewpager滑動的時候好使,但是通過上面的button點擊讓viewpager通過setCurrentItem中的1頁調到第5頁等,這樣不相鄰的頁的時候,由於加載的時候沒有預先加載視圖,所以setUserVisibleHint是在onCreate之前加載的,所以加載不出來數據,這時候我們只需在onCreateView或其他之後的方法中調用:

 if (getUserVisibleHint()){
            //加載數據
        }

這樣就可以啦

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