在Android开发中,有很多种情况都是viewpage+fragment左右滑动进行布局的,例如下面的今日头条
在今日头条app上,我们可以看到,其顶部都是一栏的类型数据源,可滑动,可联动下面的viewpage里的fragment,但是很多时候,viewpage+fragment中的fragment每次都将走onCreate方法,导致在视觉上造车一定的卡顿,而且在加载当前fragment的时候,往往会预加载下一个fragment的数据,造成视觉上的误解。
思路:
在尝试过很多方法之后,终于找到了一个比较好的解决方法。使用Fragment自带的setUserVisibleHint()来判断当前fragment是否对用户可见,根据回调的isVisibleToUser参数来进行相关的逻辑判断。创建一个变量isVisible来拿到fragment是否可见的标志。
但是直接根据isVisible判断就加载数据,很有可能很多控件在OnCreateView()方法还未执行完成的情况下出现NullPointerException空指针的情况。所以我们需要在控件初始化完成并且用户可见的时候,再去进行数据的加载。
最后集成一个通用的LazyloadFragment实现懒加载的fragment
public abstract class LazyloadFragment extends Fragment {
protected View rootView;
private boolean isInitView = false;
private boolean isVisible = false;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(setContentView(), container, false);
init();
isInitView = true;
isCanLoadData();
return rootView