허원철의 개발 블로그

Android - Data Binding 본문

mobile

Android - Data Binding

허원철 2016. 12. 5. 08:10
이번 글은 Data Binding에 대한 글입니다.


what..?
안드로이드를 하다보면 레이아웃 XML의 id와 Activity의 View를 연결 해줘야하는 경우가 다반수 입니다. 그래서 안드로이드 에서는 2가지 방법으로 View를 연결 해주었습니다.

① 초기에는 이런 식으로 밖에 사용하지 못 했습니다.
   (물론 지금도 많은 분들이 사용하고 있습니다.) 
TextViet tvTest = findViewById(R.id.tv_test);

② Butterknife라는 라이브러리가 생기면서 다르게 변화 하였습니다.

@Bind(R.id.tv_test) // or @BindView(R.id.tv_test)
TextViet tvTest;


- 이제는 Data Binding으로 추가라이브러리 없이 Android 2.1(API  Level 7) 이상에서 활용 할 수 있습니다. (gradle 1.5.0-alpha1 이상)


How..?
[build.gadle]
android {
         // 중략 ...

         dataBinding {
                  enable = true
         }

         // 중략 ...
}

- 한가지 예외적인 사항이 있다면 레이아웃 XML을 작성할 때, 최상위 레이아웃 태그를 layout Tag 로 해야 합니다.


[activity_home.xml]


이제 Activity를 상속 받은 클래스에서 Binding을 해보도록 하겠습니다.

레이아웃 XML 파일을 activity_home 으로 만들었기 때문에 ActivityHomeBinding 이라는 ViewDataBinding 을 상속 받아 만들어진 객체를 만들 수 있습니다.


ActivityHomeBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_home);

// binding.tvTest ...
// binding.rlHome ...

레이아웃 XML 파일에서 id 들이


rl_home  ==> rlHome

tv_test    ==> tvTest


_가 사라지고 _뒤에 단어가 대문자로 바뀌어서 사용할 수 있게 됩니다.(카멜표기법을 기준으로 변환)


View Binding 하는 것 뿐만 아니라 레이아웃 XML 파일에 data Tag 를 사용하여 해당 Data Binding 할 수 있고, onClick 속성을 통해 Event Binding 을 할 수 있습니다.



Add...

- 매번 Binding 객체를 만들기 귀찮습니다. 그래서 추상 클래스를 만들었습니다.



BaseActivity에 제네릭을 덧붙여 해당 타입으로 맞춰 줄 수 있게 합니다. 그리고 DataBindingUtil.setContentView를 올라가 보면, activity.setContentView 하는 것을 찾아볼 수 있습니다. 이제는 setContentView 를 해주지 않아도 됩니다. setBinding을 통해 Binding을 해줌으로써 setContentView를 해결 할 수 있습니다. 본 클래스에서는 getBinding()으로 불러와 쓰도록 하고 있습니다.



'mobile' 카테고리의 다른 글

Android - MVP 패턴  (414) 2016.12.04
Comments