一 来源:
setUserVisibleHint :设置Fragment 内部维系是否可见的mUserVisibleHint【Boolean型】变量的 方法
public void setUserVisibleHint(boolean isVisibleToUser) {
if (!mUserVisibleHint && isVisibleToUser && mState < STARTED
&& mFragmentManager != null && isAdded()) {
mFragmentManager.performPendingDeferredStart(this);
}
mUserVisibleHint = isVisibleToUser;
mDeferStart = mState < STARTED && !isVisibleToUser;
}
当此Fragment可见变化时通过setUserVisibleHint 此方法 设置isVisibleToUser true为可见 false 为不可见
通过getUserVisibleHint ()获取当前Fragment是否可见
public boolean getUserVisibleHint() {
return mUserVisibleHint;
}
二 实现:
在设置可见的时候判断是否可以加载数据 具体实现如下:
public class BasePageFragment extends Fragment{
// fragment是否初始化
protected boolean isInit = false;
// 是否加载过数据 标记 防止滑动viewpager重复加载
protected boolean isLoadData = false;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
isInit = true;
// viewpager里首个fragment首次加载数据
view.post(new Runnable() {
@Override
public void run() {
canLoadData();
}
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
isInit = false;
isLoadData = false;
}
/**
* fragment 是否可见变化
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
canLoadData();
}
private void canLoadData() {
// fragment 未初始化
if (!isInit) {
return;
}
// 当fragment可见时 判断是否加载过数据,
if (getUserVisibleHint()) {
if (!isLoadData) {
// 加载数据
loadData();
isLoadData = true; // 加载完改变标记 防止滑动重复加载
}
}
}
/**
* 执行加载数据的方法
*/
protected void loadData() {}
}