안드로이드 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)
반응형
그리드형
'IT > Android' 카테고리의 다른 글
[안드로이드] 현재 실행중인 Activity 알아내는 방법 (2) | 2020.08.21 |
---|---|
[Android] 카카오톡 친구목록 api 사용 중 "there are no assigned team members in your app" 오류 해결 방법 (0) | 2020.07.22 |
윈도우에서 firebase SHA 인증서 확인하는 방법 (0) | 2020.07.04 |
'keytool'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 해결방법 (4) | 2020.07.04 |
안드로이드 스튜디오 프로젝트 인증서 생성하고 배포용 apk 파일 만들기 (0) | 2020.06.04 |
안드로이드 emulator: process finished with exit code 1 에러 해결방법 (0) | 2020.05.30 |
안드로이드 스튜디오 업데이트 하는 방법 (0) | 2020.05.29 |
[안드로이드] 색상코드에 투명도 주는 방법 (8) | 2020.05.26 |