티스토리 뷰
뷰 바인딩을 사용하는 이유
코드에서 XML에 입력한 객체를 사용하기 위해 findViewById() 함수를 이용하는 것은 꽤 귀찮은 방법이다.
이 경우 다음과 같이 id 값으로 뷰 객체를 획득하는데
val textView1: textView = findViewById(R.id.text1)
한 화면을 구성하는 데만도 많은 뷰가 필요하고,
뷰는 대부분 코드에서 이용하므로
-> 코드에서 뷰 객체를 선언하고 모두 findViewById() 함수로 하나하나 가져와야 하므로 번거롭다는 단점이 있다.
개발자들이 조금 더 쉽게 레이아웃 XML 파일에 등록된 뷰 객체를 쉽게 사용하기 위해
뷰 바인딩을 이용하게 되었다.
뷰 바인딩(View Binding)이란?
뷰 바인딩은 레이아웃 XML 파일에 선언한 뷰 객체를 코드에서 쉽게 이용하는 방법이다.
뷰 바인딩을 사용하는 방법에 대해 살펴보자.
그래들 파일에 뷰 바인딩 설정하기
- build.gradle 파일을 열어 android 영역에 다음과 같이 buildFeatures를 선언한다.
android{
...
buildFeatures{
viewBinding = true // 뷰 바인딩을 적용하라는 의미
}
}
이렇게 하면 레이아웃 XML 파일에 등록된 뷰 객체를 포함하는 클래스가 자동으로 만들어진다.
자동으로 만들어지는 클래스의 이름은 레이아웃 XML 파일명을 따른다.
- 첫 글자를 대문자로 하고 밑줄(_)은 빼고 뒤에 오는 단어를 대문자로 만든 후 'Binding'을 추가한다.
- activity_add_to_do.xml -> ActivityAddToDoBinding
binding 객체 이용 방법
자동으로 만들어진 클래스의 inflate() 함수를 호출하면 바인딩 객체를 얻을 수 있다.
+ 이때 인자로 layoutInflater를 전달한다.
val binding = ActivityAddToDoBinding.inflate(layoutInflater)
// 바인딩 객체의 root 프로퍼티에는 XML의 루트 태그 객체가 자동으로 등록 되므로
// 액티비티 화면 출력은 setContentView() 함수에 binding.root를 전달하면 된다.
setContentView(binding.root)
바인딩 객체에 등록된 뷰 객체명은 XML 파일에 등록한 뷰의 id 값을 따른다.
XML에 뷰를 다음과 같이 등록했다면 바인딩 객체에 button1이라는 프로퍼티명으로 등록된다.
<Button android:id="@+id/button1" />
따라서 코드에서는 다음과 같이 이용하면 된다.
binding.button1.setOnClickListener{
Toast.makeText(this, "버튼1을 클릭하였습니다.", Toast.LENGTH_SHORT).show()
}
binding 클래스가 필요 없는 경우
build.gradle 파일에 뷰 바인딩 설정 시 레이아웃 XML 하나당 바인딩 클래스가 자동으로 만들어지는데,
이때는 XML 파일의 루트 태그에 다음과 같은 속성을 추가하면 해당 XML 파일을 위한 바인딩 클래스를 만들지 않는다.
tools:viewBindingIgnore="true"
참고
깡샘의 안드로이드 앱 프로그래밍 with 코틀린
'안드로이드[Kotlin]' 카테고리의 다른 글
[Database] Room이란? (1) | 2022.02.16 |
---|---|
[안드로이드/Kotlin] 목록 화면을 만들기 위한 RecyclerView (0) | 2022.02.07 |
[아키텍처 패턴] MVP 패턴이란? (0) | 2022.02.02 |
[아키텍처 패턴] MVC 패턴이란? (0) | 2022.01.12 |
[Kotlin]코루틴 (0) | 2021.11.27 |