지금까지는 xml의 위젯들의 id를 activity의 코드와 연결할 때 findfindViewById<>()를 썼는데, 이를 대체하기 위해 나온 뷰 바인딩을 쓰면 좀 더 편하게 위젯을 연결시킬 수 있다.
Null Safety
Type Safety
1. gradle 설정
버전에 맞게 gradle을 설정해 준다.
android{
...
// AndroidStudio 4.0 ~
buildFeatures{
viewBinding = true
}
// AndroidStudio 3.6 ~ 4.0
viewBinding{
enabled = true
}
}
2. Activity 설정
항상 MainActivity에 아래와 같이 설정해놓고 시작한다.
inflate는 xml에 있는 뷰를 객체화해준다고 생각하면 된다.
원래는 R.layout.activity_main를 넘겨주지만, binding을 사용하면 생성한 루트 뷰를 넘겨준다.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}
}
3. 사용
binding.~~
binding된 객체 안에 있는 id에 접근하여 사용한다.
...
setContentView(view)
binding.myButton.setOnClickListener{
binding.myTextView.text = "바인딩 완료!"
}
4. 바인딩 객체의 이름
뷰 바인딩 기능을 사용할 때, 안드로이드 스튜디오는 레이아웃 파일의 이름을 기반으로 한 바인딩 클래스를 자동으로 생성한다. 이 클래스는 레이아웃에 있는 모든 뷰에 대한 참조를 포함하며, 이를 통해 코드에서 직접 뷰에 접근할 수 있게 해준다. 바인딩 객체의 이름은 레이아웃 파일 이름에 'Binding'을 붙여 만들어진다.
예를 들어:
- 레이아웃 파일 이름이 activity_main.xml
인 경우, 생성되는 바인딩 클래스의 이름은 ActivityMainBinding
이 된다.
- 레이아웃 파일 이름이 fragment_home.xml
인 경우, 생성되는 바인딩 클래스의 이름은 FragmentHomeBinding
이 된다.