背景:
这两天在使用viewPager2的时候,我像以往那样把onCreateView和onCreate方法往fragment里面壹佰,初始化控件的时候,getActicity().findviewByid(),对象居然是空指针。难道我和activity绑定失败了?我这样想到,检查adapter,没啥问题呀。查一下资料,viewpager2里面实现了懒加载,那么在fragment里面也必须要有相应的懒加载实现,onResume生命周期是必须的。
上代码:
public class HomeFragment extends Fragment {
private boolean isFirstLoad = true; // 是否第一次加载
private Context mContext;
private TextView tv;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext=getActivity();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home,container,false);
initView(view);
return view;
}
@Override
public void onResume() {
super.onResume();
if(isFirstLoad){
//将数据加载逻辑放在onresume方法中
initData();
initEvent();
isFirstLoad = false;
}
}
private void initData() {
// tv.setText("111");
}
/**
* 初始化视图
* @param view
*/
private void initView(View view) {
tv=view.findViewById(R.id.home);
}
void initEvent(){
}
}
注意事项:
写代码的时候要按照fragment生命周期的顺序来写,oncreate在oncreateview的前面,再下来才是onresume。大家最好把关键的生命周期顺序记住,如果没记住,写的时候对着此图检查即可。?
|