由於viewpager有預加載功能,所以有時候相鄰的fragment加載大量數據的時候會卡頓,oom等,所以我們想要的效果就是viewpager顯示那個fragment就加載那個,這樣我們就用到了一個方法,具體代碼如下:
private boolean isCreate;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
//super千萬不能刪,要不然不起作用
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && isCreate) {
getData();
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//調用此方法的時候表示佈局已加載,這時候吧isCreate 設爲true
//表示控件佈局已加載完成,此時加載數據就不會空指針啦
//最好在這裏調用,如果在oncreate中調用,那麼第一頁會調用兩次加載數的方法,分別是:setUserVisibleHint和onActivityCreated
isCreate = true;
if (myView == null)
myView = inflater.inflate(R.layout.fragment_home_home, null);
ViewGroup parent = (ViewGroup) myView.getParent();
if (parent != null)
parent.removeView(myView);
return myView;
}
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
this.init(); //控件初始化
//由於setUserVisibleHint在onCreateView之前就調用啦
//所以,viewpager的第一頁的時候是無法調用數據的,所以在 //這加一個加載數據的調用
if (getUserVisibleHint()) {
this.getData(); //得到數據
}
this.SomeThingListener(); //一些監聽事件
}