通过网上查阅资料,总结归纳的解决办法,可能不会适用所有人,但还是希望给大家提供方便
public abstract class BaseFragment extends Fragment {
private boolean isViewPrepared=false;//是否初始化完成
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initStatus();
}
public abstract void initStatus();
public abstract void initData();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = setContentView(inflater);
setupView(v);
addListener(v);
if (!isViewPrepared&&getUserVisibleHint()) {//尚未初始化view,不能执行initData()方法[会报空指针]
initData();
}
isViewPrepared=true;//isViewPrepared判断和赋值位置不能变,考虑setUserVisibleHint更新数据
return v;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
// 判断该Fragment时候已经正在前台显示,就可以知道什么时候去加载数据了
if (isVisibleToUser && isViewPrepared) {
initData(); // 加载数据的方法
}
super.setUserVisibleHint(isVisibleToUser);
}
}