findviewById는 이제 오래된 유물같은 API가 되어버렸습니다.
findViewById를 이용할 때 발생하던 NullException도 ViewBinding과 함께라면 더이상 걱정할 필요가 없게되었구요.
공식문서에서도 ViewBinding사용을 추천하고 있습니다.
오늘은 이 ViewBinding을 구현하는 방법에 대해서 보도록 하겠습니다.
1. Dependency설정
ViewBinding을 사용하기 위해서는 app레벨의 Build.gradle에서 설정을 해 주어야 하는데요.
buildFeature를 아래와 같이 간단한 한줄을 추가하면, ViewBinding을 사용할 수 있게 됩니다.
buildFeatures { viewBinding true }
2. Activity에서 사용하기
2-1. XML파일
이젠 Activity에서 findviewById를 대신해서 사용해 보아야 겠지요.
먼저 Activity에서 사용할 xml파일을 보도록 하겠습니다.
아래와 같이 "activity_main.xml" 파일로 되어 있습니다.
2-2. setContentView
ViewBinding을 사용하면 Binding클래스에 접근할 수 있는데요.
위와같이, activity_main.xml파일이 있다면,
CamelCase화된 이름과 뒤에 Binding을 붙여서, ActivityMainBinding이라는 클래스에 접근할 수 있게 됩니다.
이 클래스에 접근하여서 inflate함수로 binding객체를 얻어오구요.
이 객체의 root값을 setContentVIew의 인자로 넘겨주면 됩니다.
이제 어떤 요소이건, mBinding을 통해서 접근할 수 있게 되었습니다.
다만 모든 요소는 camel case로 접근할 수 있습니다.
예를 들어, id를 "text_movie_title"로 잡았다고 가정해 보겠습니다.
mBinding에서는 아래와 같이, "mBinding.textMovietitle"로 접근하게 됩니다.
그럼 아래와 같이 mBInding변수로 접근해서, "textMovieTitle"의 text를 변경해 줄 수 있습니다.
mBinding.textMovieTitle.text = viewModel.movieTitle
mBinding.testButton.setOnClickListener { viewModel.testClicked() }
3. Fragment에서 Binding 사용하기
그럼 이번에는 ViewBinding을 Fragment에서 사용해 보도록 하겠습니다.
onViewCreated에서 binding을 생성해서 사용하려면 아래와 같이 쉽게 할 수 있습니다.
인자로 생성된 view를 넘겨주기 때문인데요. onCreateView에서 하는 것보다 심플해졌네요.
4. 정리
예전에, dataBinding은 정식으로 나오고, ViewBinding은 alpha나 Beta버전일 때가 있었는데요.
개인적으로 아무리 작은 앱이라도, alpha나 Beta버전을 프로덕션버전앱에 넣는 것은 원하지 않아서,
DataBinding으로 다 도배가 되어있던 적도 있었습니다.
하지만, 이제는 대부분의 경우 ViewBinding을 사용하고 있게 되었습니다.
그만큼 활용도도 높고 좋은 것 같네요.
추가적으로 좋은 방법이나 업데이트된 것이 있다면, 이 글을 통해서 업데이트하도록 하겠습니다.
'Android 개발 > Android UI' 카테고리의 다른 글
RadioButton과 RadioGroup에 대한 정리 #Android (0) | 2020.03.16 |
---|---|
Android Dialog 구현하는 방법 #Kotlin 버전 다이얼로그 (0) | 2020.01.17 |
Android Checkbox에 Custom 이미지 사용하기 (0) | 2019.09.18 |
안드로이드 Webp이용해 이미지 용량 줄이는 방법 (1) | 2019.09.09 |
DialogFragment 사이즈 조정 및 타이틀 제거 (0) | 2019.08.26 |
업그레이드 된 안드로이드 개발 이미지 추가 방법 #Resource Manager (0) | 2019.07.14 |
Android 버튼 UI에 Ripple효과 넣기 (2) | 2019.06.16 |
CoordinatorLayout과 Behavior (0) | 2019.05.30 |
Android 에서 Vector(벡터) 이미지 사용하기 (0) | 2019.01.18 |
FragmentDialog 로 대화상자(팝업) 구현하기 (0) | 2019.01.08 |
댓글