본문 바로가기
Android App/Kotlin

뷰 바인딩(View Binding)

by AppJinny 2022. 11. 4.

*뷰 바인딩(View Binding)

-뷰에대한 접근, 뷰에 접근해서 값을 입력하거나 사용자와 상호작용하는 방식

-기존의 findViewById()를 대체해 사용하던 코틀린 익스텐션을 사용했지만 2021년 9월 기준으로 완전제거됨

-코틀린 익스텐션을 개선한 것이 뷰 바인딩

-뷰 바인딩은 레이아웃 파일이 사용되는 모든 곳에서 코틀린 익스텐션 대체 가능

-액티비티, 프래그먼트, 어탭터에서 각각의 사용법이 다름

 

*코틀린 코드와 레이아웃 연결(뷰 바인딩 방식을 사용해 뷰와 코드를 연결)

1. 뷰 바인딩 설정 추가

-안드로이드 스튜디오 프로젝트 생성

-build.gradle 파일

-andriod{} 안에 뷰 바인딩 설정 추가

//뷰바인딩
buildFeatures{
    viewBinding true
}

-안드로이드 스튜디오 상단 Sync Now

 

2. 코틀린 파일에서 레이아웃 파일을 자동변환 공식에따라 바인딩으로 생성

--자동변환공식 : 레이아웃 파일명(첫 글자와 언더바 다음 글자를 대문자로 변환) + Binding

--자동변환공식 예 : activity_main.xml = ActivityMainBinding

-MainActivity.kt 파일

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

 

3. 변수에 저장된 바인딩의 root뷰 setContentView에 전달

setContentView(binding.root)

 

4. 바인딩을 도트연산자(.)로 뷰 id에 접근

binding.textView.text = "Hello"

 

*MainActivity.kt 전체 코드 설명

class MainActivity : AppCompatActivity() {

    //build.gradle (:app)에 뷰 바인딩 설정 추가

    //자동변환 공식으로 레이아웃파일 생성 ActivityMainBinding
    //클래스로 변환된 바인딩의 inflate함수에 layoutInflater를 전달하여 초기화 하고 변수에 저장
    //함수에 전달되는 layoutInflater : MainActivity가 가지고 있음, 모든 Activity에서 호출 가능
    val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //변수에 저장된 바인딩의 root뷰를 setContentView에 전달
        //setContentView(R.layout.activity_main)
        setContentView(binding.root)

        //바인딩을 도트 연산자(.)로 뷰(연결한 xml)의 id에 접근 후 사용
        binding.textView.text = "Hello"

    }

}

 

 


이 포스팅에 작성한 내용은 고돈호, ⌜이것이 안드로이드다⌟, 한빛미디어(주), 2022 에서 발췌하였습니다.