当ViewPager和Fragment组合使用的时候,如果每个Fragment里面都有请求数据的话,会一下子加载大量资源。有时候项目中只需要在滑动到当前页的时候加载数据,实现Fragment懒加载,这时可以利用Fragment的setUserVisibleHint(boolean isVisibleToUser)方法来实现。
在Fragment里面重写setUserVisibleHint(boolean isVisibleToUser)方法
因为setUserVisibleHint()方法在onCreateView()之前执行,所以可能会有空指针异常,所以用isViewCreated 变量来控制在onCreateView()执行完成后加载数据。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
if (isVisibleToUser) {
isShowed = isVisibleToUser;//isShowed 标识是否对用户可见
if ((datas== null || datas.size() == 0)
&& isViewCreated) {//isViewCreated 标识onCreateView()方法已执行
loadLvData();//加载数据
}
}
super.setUserVisibleHint(isVisibleToUser);
}
在onCreateView()方法中添加下面代码:
private boolean isViewCreated = false;
private isShowed = false;
private List<String> datas;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//...已有的代码
isViewCreated = true;
if (isShowed) {
loadLvData();
}
}