바인딩은 아주 편리하지만 개념을 잘 모르면 써먹기 어렵습니당.. 바인딩 개념을 정확히 알고있으면 작업량이 많이 줄어요
ViewBinding
Android Studio 의 버전이 변경되면서 추가된 라이브러리 기존의 androidx 를 통해 View의 주소값을 자동으로 받아오는 것은 Kotlin 밖에 되질 않아 이를 자바에서 사용할 수 있도록 추가한 라이브러리
layout 폴더에 있는 xml 파일을 관리하는 클래스를 자동 생성하여 이를 통해 View 를 관리할 수 있는 개념 layout 폴더에 있는 xml 파일당 하나의 클래스가 생성되며 이 클래스에는 xml 파일에 배치한 View들을 관리할 수 있는 기능이 구현되어 있다. 이를 통해 View들을 손쉽게 관리할 수 있다.
val a1 = findViewById(뷰의 id)
지난 글에서 이런식으로 객체의 id를 생성하고 해당 id를 통해 객체의 주소값을 가져왔었다. 개발자들은 id를 만들면 무조건 객체의 주소값을 가져온다 (주소값을 안쓸거면 id를 만들필요가 없기 때문) 이러한 점을 이용해서 만든 것이 Binding이다 !
Kotlin
id와 동일한 이름의 프로퍼티가 자동으로 생성되고 프로퍼티에 View 객체의 주소값이 담겨졌다
Kotlin, Java
ViewBinding ViewBinding 객체안에 View의 id와 동일한 이름의 프로퍼티가 생성되고 프로퍼티안에 View 객체의 주소값이 자동으로 담겨져있다.
요즘 자바를 잘 안쓰려고 하는게,, 자바를 만든 회사인 Oracle과 Google이 아주 사이가 안좋다... 그래서 Google중심으로 많은 회사들이 탈자바 하려고 코틀린을 개발하곤했음. 근데 그럼에도 자바를 사용하는 사람이 많으니, ViewBinding을 그래 자바에도 제공을 하자... 하며 자바에서도 사용가능해짐 ㅎㅎ,, 여담입니다
▼ViewBinging을 사용해봅시다
View Binding을 사용하기 위해서는 app 수준의 gradle 파일에 다음과 같이 추가해준다.
package kr.co.lion.android03_viewbinding
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.View.OnClickListener
import android.widget.Button
import android.widget.TextView
import kr.co.lion.android03_viewbinding.databinding.ActivityMainBinding
// ViewBinding
// 코드를 통해 배치된 View들을 사용하기 위해서는 View 객체의 주소값을 가져와야 한다.
// findViewById 메서드를 이용해 원하는 View 객체의 주소값을 가져올 수 있다.
// 만약 ViewBinding를 설정하면 id가 설정되어 있는 View 객체의 주소값이
// 미리 프로퍼티에 담겨져 있기 때문에 이것을 사용만 하면 된다.
// 셋팅 방법
// 1. Module 수준의 build.grade.kts 파일을 열어준다.
// 2. build.grade.kts 파일에 다음과 같이 작성하서 sync now를 눌러준다.
// buildFeatures{
// viewBinding = true
// }
// 3. ViewBinding 객체를 얻어온다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ViewBiding 사용 X
/*setContentView(R.layout.activity_main)
// View의 주소값을 가져온다.
val v1 = findViewById<TextView>(R.id.textView)
val v2 = findViewById<Button>(R.id.button)
// Button에 버튼을 눌렀을 때 동작할 리스너를 설정해준다.
v2.setOnClickListener(object : OnClickListener {
// 버튼을 누르면 호출되는 메서드
override fun onClick(v: View?) {
// TextView에 문자열을 설정한다.
v1.text = "버튼을 눌렀습니다."
}
})*/
// ViewBinding 사용
// Viewbinding 객체를 얻어온다.
// activity_main.xml 을 관리하는 ViewBinding을 통해 UI 요소들의 객체를 생성한다.
// ViewBinding 클래스의 이름은 layout 폴더에 있는 xml 파일의 이름을 기초로 결정된다.
// activity_main.xml -> ActivityMainBinding
// activity_lion.xml -> ActivityLionBinding
// layoutInflater : xml 파일을 통해서 View 객체를 생성할 수 있는 도구
// xml 파일에 배치한 모든 View들의 객체를 생성하고 객체의 주소값을 담을 프로퍼티를
// 만들어 객체의 주소값을 담아준다. 이러한 프로퍼티를 ViewBinding 객체가 가지고 있다.
val activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
// Viewbinding이 관리하는 View 들 중 최 상위 View를 설정하여 화면에 보여준다
// Viewbinding이 가지고 있는 root 프로퍼티는 가장 최상위에는 View를 지칭한다.
// 지칭한 View를 화면에 보여준다.
setContentView(activityMainBinding.root)
// ViewBinding 객체에 id가 설정되어 있는 View 객체의 주소값이 담겨져 있는
// 프로퍼티가 있기 때문에 프로퍼티를 이용해 View 객체에 접근한다.
activityMainBinding.button.setOnClickListener(object : OnClickListener {
// 버튼을 누르면 호출되는 메서드
override fun onClick(v: View?) {
// TextView에 문자열을 설정한다.
activityMainBinding.textView.text = "버튼을 눌렀습니다."
}
})
}
}