데이터 바인딩 라이브러리 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&lt;String&gt;"/>
    <variable name="sparse" type="SparseArray&lt;String&gt;"/>
    <variable name="map" type="Map&lt;String, String&gt;"/>
    <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


+ Recent posts