
안드로이드 fragment에서 작업 시 다음과 같은 오류가 간간히 발생합니다. java.lang.NullPointerException 오류인데요.
android.view.view android.app.activity.findviewbyid(int)' on a null object reference
onCreateView에서 inflater 하기 전에 findViewById를 호출해서 생기는 문제인 것 같습니다. 100% 발생하는 것이 아닌 간헐적으로 발생하는 문제입니다. 코딩하면서 가장 애매한 순간이 바로 간헐적으로 발생하는 문제 같습니다. 사이클은 onCreateView -> onActivityCreated 순서로 진행하지만 간혹 inflater가 되기 전에 onActivityCreated가 호출되는 것 같습니다.
수정 전 코드
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_season2_banner, container, false);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
banner = (LinearLayout)getActivity().findViewById(R.id.banner);
initBanner(); //banner 사용
}
수정 후 코드
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_season2_banner, container, false);
banner = (LinearLayout)v.findViewById(R.id.banner);
// Inflate the layout for this fragment
return v;
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initBanner(); //banner 사용
}
onCreateView에서 View 객체를 만들고 바로 findViewById를 통해 xml에 등록된 객체를 등록시켜 줍니다. 수정 전에 썼던 getActivity().findViewById를 v.findViewById로 수정해 줍니다. (v = View v)
반응형
그리드형