일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- apache
- java
- tomcat
- 권한
- 페이스북
- spring boot
- RabbitMQ
- Producer
- clean code
- g1
- Refactoring
- 리팩토링
- 시큐리티
- JPA
- 스프링 부트
- 페이징
- gdg
- Security
- 비동기
- OAuth
- Spring
- 스프링부트
- 스프링
- assertj
- oauth2
- 클린코드
- load balancing
- jvm
- GC
- JWT
Archives
- Today
- Total
허원철의 개발 블로그
Android - Data Binding 본문
이번 글은 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