본문 바로가기

Android/AAC

[Android] 데이터 바인딩 어댑터 (Data Binding Adapter) 사용 방법

728x90

필자가 예전에 DataBinding 관련한 공부를 진행하면서 기본적인 사용 방법에 대해 간단히 작성해 둔 게시글이 있다.

이번에 클린 아키텍처 관련 예제를 작성하다 데이터 바인딩을 사용한 조금 더 심화(?)된 방법으로 사용하고 있는 것을 보고 정리겸 간단하게 사용법을 작성해 보려고 한다.

 

* 2020.06.15 - [AAC] - [DataBinding] 데이터 바인딩 기본 사용 방법

 

[DataBinding] 데이터 바인딩 기본 사용 방법

DataBinding 적용 최소 사항 Android 2.1 (API 7, Android Nougat) 이상 안드로이드 누가의 경우, 19년 10월을 기준으로 지원 중단. 갤럭시 S6이상의 기기에서 사용 가능. Android Plugin for Gradle 1.5.0-alpha1..

heegs.tistory.com

기본적인 바인딩 방법은 이전에 작성했던 게시글과 동일하다.

 

DataBindingUtil.setContentView 를 사용하여 레이아웃을 binding 하여 사용하면 된다.

 

위의 코드는 모든 Activity 에서 상속받아 사용하는 BaseActivity 이기 때문에 Activity 선언 시 layoutId 를 인자로 받아 해당 Activity 와 layout 을 binding 시켜주도록 하였다.

 

이처럼 Activity 선언 시 파라미터로 binding 할 layoutId를 넣어준다.

물론, 이처럼 Base 를 만들지 않고 사용하게 된다면 Base 에 선언했던 DataBindingUtil 부분을 이곳에서 선언하여 사용하면 된다.

 

xml 에서 binding 하여 사용하기 위해 onCreate 에서 viewModel 에 대한 것들도 binding 해주었는데, vm 은 DataBindingUtil 이 제공하는 함수 명이 아닌, 사용자가 xml 에 선언하는 이름이라고 보면 된다.

 

name 을 sample 이라고 작성했다고 가정하면, 위의 onCreate에서는 binding.sample = viewModel 이 되어야 하는 것이다.

 

이 때 name 에 언더 스코어(_) 를 붙일 수 있는데, 이러한 경우 언더 스코어를 그대로 사용하지 않고 바로 대문자로 붙여서 사용한다.

즉, name = vm_sample 이라면 binding.vmSample = viewModel 로 선언하면 되는 것이다.

 

위의 xml 을 보면 기본 방법과는 다른 방법으로 사용했음을 알 수 있다.



하나씩 확인해보자.

우선, bind 라고 선언된 부분은

필자가 직관적으로 구분하기 위하여 추가적으로 작성한 부분이다.

xml 선언 부 사진을 보면, xmlns:bind="~" 라고 선언된 부분을 확인할 수 있을 것이다. 이처럼 선언을 하게 된다면 xml 옵션을 추가할 때 위의 이미지 처럼 추가할 수 있는 것이다.

물론, bind 대신 기존에 작성 되어있던 app: 을 그대로 써도 상관 없으며, 아예 해당 부분을 생략해도 상관 없다.

사용자의 편의에 따라서 맞춰서 작성하면 된다.

 

그렇다면, 뒤의 endlessScroll, setItems 는 무엇인가?

필자가 데이터 바인딩 어댑터로 사용하기 위하여 어노테이션에 추가해 놓은 이름이다.

이게 무슨말인지는 하단의 코드를 보면 알 수 있다.

 

코드를 확인해 보면, @BindingAdpater 라는 어노테이션을 선언하고 그 안에 value 값으로 xml 에 추가된 이름을 확인할 수 있을 것이다.

이처럼 BindingAdpater 어노테이션을 선언하고 이름을 넣어주게 되면 해당 이름으로 선언된 함수를 bind 하여 사용할 수 있게 된다.

 

즉, 위의 코드 중 setItems 로 예를 들자면 rv_movies 라는 id 를 가지고 있는 RecyclerView 에 setItems 라는 이름으로 BindingAdapter 가 선언되어있는 함수를 수행시키고, 그 인자 값으로 vm.movieList 를 넣어라.

라는 얘기가 된다.


 

뭐, 설명은 길었지만 간단하게 사용방법은

1. BindingAdapter 어노테이션을 선언하고
2. 인자로 사용자가 사용할 이름을 넣고
3. 사용할 함수를 작성한다.

 

라고 보면 되겠다.

 


해당 게시글에 사용되는 예제 코드는 gitHub 에 업로드 해두었습니다.

https://github.com/HeeGyeong/CleanArchitectureSample

 

GitHub - HeeGyeong/CleanArchitectureSample

Contribute to HeeGyeong/CleanArchitectureSample development by creating an account on GitHub.

github.com

 

728x90