案例1: ViewPager + 3个Fragment 时, 第一次打开时第一个fragment加载数据, 其他的不加载, 切换标签后加载对应的fragment的数据, 其他的fragment不加载数据
@Override
public void onResume() {
super.onResume();
// 第一次进入并且显示出来的时候会调用, 其他时间不调用, 所以第一次进入时调用该方法加载数据;
// 注意: 第一次进入时会有多个fragment创建, 但只有一个会显示出来;
if (getUserVisibleHint()) {
loadAll();
}
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
// 第一次进入时会调用多次, isVisibleToUser会从false变为true, 但是view都没有创建完成, 所有第一次进入时调用该方法没啥作用;
// 第二次进入是在标签切换的时候进入的, 并且每次进入都会调用该方法, 此时view全部创建完成, 可以加载数据更新ui, 所以除了第一次进入, 其他时间进入都可以使用该方法做数据加载和ui更新操作;
Log.d("geaosu", "------>> setUserVisibleHint: " + isVisibleToUser);
if (isVisibleToUser) {
if (rlRefresh != null) {
loadAll();
}
}
}
// 注意: 在onCreateView之前调用, 状态会更改两次, 第一次是isVisibleToUser=false, 第二次是isVisibleToUser = true;
// 虽然第二次isVisibleToUser = true, 但是view还是没有被创建完成;
// 使用技巧: 搭配onResume()方法一起使用
// 在第一次加载fragment的时候, 逻辑代码在onResume()方法中执行
// 在加载成功后多个fragment之间切换时逻辑代码在setUserVisibleHint()方法中执行
// 注意: 如果只需要执行一次, 可以在判断数据是不是为空, 如果有数据, 则不加载数据
// 需要缓存所有fragment, 否则没有缓存的每次数据后丢失 mViewPager.setOffscreenPageLimit(fragments.size());