前言
最近工作的时候,用到ViewPager 结合Fragment做了一个类似网易新闻的数据展示界面,想做到只有在Fragment可见的时候,才做一次数据加载,故再次封装了一个LazyFragment类,在此做个记录。
package com.xes.online.revision.view.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by wwzhang on 2019/1/3
*/
public abstract class ReLazyFragment extends Fragment {
private boolean isCreate;
private View mRootView;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
if (mRootView == null) {
mRootView = View.inflate(getContext(), setLayoutId(), null);
initOthers(mRootView);
}
if (!isCreate && getUserVisibleHint()) {
onVisible();
}
return mRootView;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (mRootView == null) {
return;
}
isCreate = true;
if (isVisibleToUser) {
onVisible();
}
}
/**
* fragment 可见回调 可以用数据加载
*/
public abstract void onVisible();
/**
* 设置contentview
*/
public abstract int setLayoutId();
/**
* @bref 初始化其他工具
*/
public abstract void initOthers(View mRootView);
}
总结:我使用的时候,是ViewPager结合FragmentPagerAdapter 使用,定义mRootView 为了复用Fragment的view,对于Fragment此时的生命周期可参考FragmentPagerAdapter中Fragment的生命周期。希望对您有所帮助。