본문 바로가기
Andorid Kotlin

layout에 생성한 오브젝트 접근 방법

by SimonLee 2024. 10. 1.

아래 import가 안되는 경우 layout에 생성한 오브젝트를 코드에서 id를 통하여 접근하지 못한다.

import kotlinx.android.synthetic.main.activity_main.*

 

build.gradle 에서 kotlin-android-extensions 플러그인을 추가하고 sync now를 클릭

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("kotlin-android-extensions")
}

android {
...
}

 

하지만

최신 안드로이드 버전에는 플러그인을 사용할 수 없다고 나온다....

The 'kotlin-android-extensions' Gradle plugin is no longer supported. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the 'kotlin-parcelize' plugin.

 

직접 id를 접근하지 말고 View binding을 권장하기 시작했다.

 

build.gradle 에서 뷰 바인딩을 활성화 하자

android {
    ...
    buildFeatures {
        viewBinding = true
    }
}
plugins {
    ...
    id("kotlin-parcelize")
}

 

뷰바인딩 사용방법은 다음과 같다.

1. 액티비티 xml파일이 바인딩 클래스로 변환이 되어 binding 변수로 들어간다.

이때 사용하는 ActivityMainBinding은 바인딩 할 layout 파일 이름으로 자동 생성이 된다. 

 - val binding by lazy { ActivityMainBinding.inflate (layoutInflater) }

 

2. setContentView 함수를 통해 액티비티가 쓸 레이아웃을 뷰 바인딩으로 세팅을 해준다.

- setContentView(binding.root)

 

3. 그 후로 레이아웃 오브젝트 접근할때 binding.[ layout 선언된 오브젝트 ID ] 로 접근하면 된다.

 

class MainActivity : AppCompatActivity() {
    val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        ....
        setContentView(binding.root)
        binding.btnsay.setOnClickListener(listener)
    }
}