본문 바로가기

안드로이드/프로젝트

안드로이드 스튜디오 findViewById을 onCreate밖에 두면 안되는 이유

728x90

서사

매번 binding으로 view를 연결하다가 팀프로젝트를 진행하는데 학과수업 프로젝트라 팀원들이 compose를 모를 수 있겠다싶어서 그냥 findViewById로 연결해주고 나중에 리팩토링하려고했다. 근데 binding만 해주다. 직접 적어줄라니 응근 귀찮았다.

 

초보적인 실수

오랜만에 써서 그랬나...여튼 onCreate 밖에 Button btn = findViewById(R.id.btn)이런식으로 작성했다.

그러고 앱이 막 꺼져서 혼자 당황했다..ㄷㄷ

 

왜 onCreate 밖에 쓰면 안되는지?

  • findViewById는 현재 레이아웃 계층에서 View를 검색한다. 따라서 외부에서 findViewById를 호출하면 아직 onCreate 뷰 계층이 초기화되지 않아 Exception이 발생하는 것이다.
  • 좀 더 쉽게 말하면 생명주기상 onCreate가 실행되고 findViewById가 호출되어야하는데 반대가 되어서 에러가 발생한다는 뜻이다.
  • onCreate 밖에서 뷰를 호출할거면 변수만 전역변수로 호출해주고 onCreate에서 findViewById를 연결해주자.

 

그리고 이런 실수는 하지말자...