반응형
이전에 java코드에서 View.visible, gone해주던 처리를
이제는 Data부에
<data>
<import type="android.view.View"/>
</data>
이렇게 import해주고
<TextView
android:text="@{user.lastName}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>
위와 같이 처리할 수도 있다
클래스 이름이 충돌한다면 별칭을 지어줄 수도 있다
<import type="android.view.View"/>
<import type="com.example.real.estate.View"
alias="Vista"/>
List<User>를 데이터부에 가져오려면
<variable name="userList" type="List<User>"/>
위와 같이 입력한다
뷰와 관련된 함수 처리도 가능하다
<data>
<import type="com.example.MyStringUtils"/>
<variable name="user" type="com.example.User"/>
</data>
…
<TextView
android:text="@{MyStringUtils.capitalize(user.lastName)}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
name, contact에 user 변수가 있다면 아래와 같이 전달 할 수도 있다
<include layout="@layout/name"
bind:user="@{user}"/>
<include layout="@layout/contact"
bind:user="@{user}"/>
식 언어
공통적인 특징
Java 식과 똑같은 부분
- 수학
+ - / * %
- 문자열 연결
+
- 논리
&& ||
- 이항
& | ^
- 단항
+ - ! ~
- 시프트
>> >>> <<
- 비교
== > < >= <=
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 연산자
android:text="@{user.displayName ?? user.lastName}"
왼쪽 피연산자가 null이면 오른쪽 값을 넣는다
문자열은
android:text='@{map["firstName"]}'
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)}"
등으로 할 수 있다
반응형