안드로이드 앱 개발기 #2 - setContentView 메소드의 파라메터를 변경하지 않아서 발생한 화면 오류

in zzan3 years ago

다음과 같은 안드로이드 앱 코드가 있다고 가정해 보자. (참고로 언어는 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!"
    }

}

지난 안드로이드 앱 개발기

Coin Marketplace

STEEM 0.18
TRX 0.13
JST 0.028
BTC 57459.32
ETH 3055.56
USDT 1.00
SBD 2.30