Android개발
[Android] DataBinding Library 2
붉은 기타
2018. 6. 12. 18:38
데이터 바인딩 라이브러리 2
참고링크 : https://developer.android.com/topic/libraries/data-binding/?hl=ko
식 언어
공통
- 수학 + - / * %
- 문자열 연결 +
- 논리 && ||
- 이항 & | ^
- 단항 **+ - ! ~**
- 시프트 >> >>> <<
- 비교 == > < >= <=
- instanceof
- 그룹화 ()
- 리터럴 - 문자, 문자열, 숫자, null
- 형변환
- 메서드 호출
- 필드 액세스
- 배열 액세스 []
- 삼항 연산자 ?:
android:text="@{String.valueOf(index + 1)}"
android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}"
android:transitionName='@{"image_" + id}'
연산 누락
Java에서 사용 가능한 식 구문에서 몇 가지 연산 누락됨
- this
- super
- new
- 명시적 일반 호출
null 병합 연산자
null 병합 연산자는 왼쪽 피연산자가 null 이 아니면 왼쪽, null이면 오른쪽 피연산자를 선택함.
android:text="@{user.displayName ?? user.lastName}"
아래와 동일함
android:text="@{user.displayName != null ? user.displayName : user.lastName}"
속성 참조
식이 클래스의 한 속성을 참조할 떄, 필드, getter, ObservableField 에 똑같은 형식이 사용됨.
android:text="@{user.lastName}"
NullPointerException 방지
생성되는 데이터 바인딩 코드는 자동으로 null 검사하여 null 포인터 예외를 피함.
예를 들면
- user가 null 인 경우
- user.name은 기본값(null)
- user.age는 기본값(0) (여기서 age는 int)
컬렉션
편의상 [] 연산자를 사용하여 배열, 목록, 희소 목록, 맵 등의 공통 컬렉션에 액세스할 수 있음.
<data>
<import type="android.util.SparseArray"/>
<import type="java.util.Map"/>
<import type="java.util.List"/>
<variable name="list" type="List<String>"/>
<variable name="sparse" type="SparseArray<String>"/>
<variable name="map" type="Map<String, String>"/>
<variable name="index" type="int"/>
<variable name="key" type="String"/>
</data>
…
android:text="@{list[index]}"
…
android:text="@{sparse[index]}"
…
android:text="@{map[key]}"
문자열 리터럴
작은 따옴표로 묶어서 사용하면 식에서 큰 따움표를 사용하기 쉬움.
특성 값을 큰 따움표로 묶을 경우 문자열 리터럴에는 ' 또는 ` 중 하나를 사용해야 함.
android:text='@{map["firstName"]}'
or
android:text="@{map[`firstName`]}"
android:text="@{map['firstName']}"
리소스
일반적인 구문을 사용하는 식의 일부로 리소스에 액세스할 수 있음.
<!-- 일부로 리소스에 액세스할 수 있음 -->
android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}"
<!-- 매개변수를 제공하여 형식 문자열과 복수형을 평가할 수 있음 -->
android:text="@{@string/nameFormat(firstName, lastName)}"
android:text="@{@plurals/banana(bananaCount)}"
<!-- 복수형이 여러 매개변수를 취할 때는 모든 매개변수가 전달되어야 함 -->
Have an orange
Have %d oranges
android:text="@{@plurals/orange(orangeCount, orangeCount)}"
plurals 는 단수/복수형에 대한 처리시 사용.
https://developer.android.com/guide/topics/resources/string-resource?hl=ko#Plurals
형식 | 일반적인 참조 | 식 참조 |
---|---|---|
String[] | @array | @stringArray |
int[] | @array | @intArray |
TypedArray | @array | @typedArray |
Animator | @animator | @animator |
StateListAnimator | @animator | @stateListAnimator |
color int | @color | @color |
ColorStateList | @color | @colorStateList |