안드로이드 앱 개발기 #2 - setContentView 메소드의 파라메터를 변경하지 않아서 발생한 화면 오류
다음과 같은 안드로이드 앱 코드가 있다고 가정해 보자. (참고로 언어는 Kotlin이다.)
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 화면 구성
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(R.layout.activity_main)
// 텍스트 뷰에 "Hello, world!" 텍스트를 보여준다.
binding.textView.text = "Hello, world!"
}
}
위 코드의 의도는 앱이 메인 화면을 띄우고 "Hello, world!" 텍스트를 보여주는 것이다. 그런데 이 코드를 실행 결과 텍스트를 화면에서 보이지 않는다. 뭔가 잘못된 것이다. 무엇이 잘못 되었을까?
문제 원인
setContentView 메소드의 파라메터가 잘못 되었다. 이 메소드의 호출은 액티비티 클래스를 새로 만들 때 자동으로 추가된다. 뷰 바인딩이나 데이터 바인딩을 적용한다면, 레이아웃의 리소스 ID(위 코드에서는 R.layout.activity_main) 대신 바인딩 객체의 root 필드로 파라메터를 바꿔야 한다. 그것을 하지 않아서 실행 결과가 빈 화면이다. 바인딩 객체가 액티비티에 적용되지 않았으니 거기에 어떤 뷰를 업데이트를 해도 화면에 반영되지 않는 것이다.
문제 해결
위 코드는 다음과 같이 수정되어야 한다. 이런 삽질 또 반복하면 안 된다. 쪽팔리잖아~~. ㅎㅎㅎ
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 화면 구성
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root) // 수정한 코드
// 텍스트 뷰에 "Hello, world!" 텍스트를 보여준다.
binding.textView.text = "Hello, world!"
}
}
지난 안드로이드 앱 개발기
Sort: Trending
[-]
successgr.with (74) 3 years ago