본문 바로가기

카테고리 없음

DataBinding (2)

반응형

이전에 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&lt;User&gt;"/>

위와 같이 입력한다



뷰와 관련된 함수 처리도 가능하다 

<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)}"

등으로 할 수 있다 



반응형