您的位置:首页 > 移动开发 > Android开发

Android Fragment延迟加载数据

2016-03-30 11:28 537 查看
Fragment 中的 onResume、onPause是随着Activity的生命周期来实现的。

而有时我们的需求时,当有多个fragment需要切换时,比如视图上面有一排tab,下面有个ViewPager,滑动下

ViewPager或点下tab就要切换Fragment。这时如果一上来就全部加载,则内存消耗过大。

这里就可以利用fragment.setUserVisibleHint(boolean isVisibleToUser) 来延迟加载数据

isVisibleToUser:true,表示frag可见;false,表示frag不可见

以下代码参考:来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4303910.html 

import android.support.v4.app.Fragment;

/*
* 生命周期:
* onAttach,onCreate,onCreateView,onActivityCreated,onStart,onResume,
* onPause,onStop,onDestroyView,onDestroy,onDetach
*
* setUserVisibleHint 的调用时机在 onActivityCreated之后
*
*/
public class BaseFragment extends Fragment {

private boolean isPrepared;
private boolean isFirstVisible = true;
private boolean isFirstInvisible = true;

public synchronized void initPrepare() {
if (isPrepared) {
onFirstUserVisible();
} else {
isPrepared = true;
}
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initPrepare(); //第一次置isPrepared=true
}

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
if (isFirstVisible) {
isFirstVisible = false;
initPrepare();
} else {
onUserVisible();
}
} else {
if (isFirstInvisible) {
isFirstInvisible = false;
onFirstUserInvisible();
} else {
onUserInvisible();
}
}
}

/**
* 第一次fragment可见
*/
public abstract void onFirstUserVisible();

/**
* fragment可见(切换回来或者onResume)
*/
public abstract void onUserVisible();

/**
* 第一次fragment不可见
*/
public abstract void onFirstUserInvisible();

/**
* fragment不可见(切换掉或者onPause)
*/
public abstract void onUserInvisible();

@Override
public void onDetach() {
super.onDetach();
}

@Override
public void onDestroy() {
super.onDestroy();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: