MyKotlinMusicPlayer 프로젝트를 위한 공부를 하던 중 처음 써보게 되었다.
기본적이지만 아직 많이 써보지 못해 자주 까먹는 부분이어서 정리를 한 번 하고 가려고 한다.
말 그대로 View를 Binding하는 것.
즉, 뷰와 코틀린 코드를 연결시키는 방법이다.
viewBinding 이전에 뷰와 코드를 연결하는 방법은 이랬다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 바로 이 부분
setContentView(R.id.activity_main)
}
}
onCreate 함수 내부에서 setContentView 의 인자로 layout 파일을 직접 넣어주는 것이다.
그 후, Activity에 있는 특정 뷰를 찾을 땐
var textViewName: TextView = findViewById(R.id.text_veiw_name)
textViewName.text = "텍스트"
이처럼 Id를 이용했다.
findViewById 를 효율적으로 이용하기 위해 코틀린 익스텐션이라는 것이 등장했지만, 몇가지 이유 때문에 요즘엔 사용하지 않는 것을 권장한다고 한다.
그래서 이용되는 것이 바로 viewBinding이다.
먼저 build.grade (Module: ...) 파일을 열고, android{} 내부에 아래의 코드를 추가한다.
buildFeatures {
viewBinding true
}
그 후, 위에서 MainActivity 부분을 아래와 같이 변경한다.
// ActivityMainBinding은 layout 파일명에 따라 바뀜
import 패키지명.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
// 추가된 부분
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 변경된 부분
setContentView(binding.root)
}
}
이제 이 Activity에서 특정 뷰를 찾을 땐
binding.textViewName.text = "텍스트"
이와 같이 하면 된다.
viewBinding에서 개인적으로 독특하다고 생각한 부분이 있었다.
1번의 예
ItemLayoutBinding 이 되고 또 다른 layout 파일 이름이 activity_play.xml 이라면 Binding 이름은 ActivityPlayBinding 으로 설정된다.2번의 예
binding.textViewName 처럼 파스칼 케이스로 사용된다.