일단 하고 보자
이전 포스팅에서는 Data Binding에 대해 간략하게 살펴보았습니다.
[Android] Jetpack - Data Binding - 1
이전 포스팅에서는 Jetpack에 대한 간략한 정리를 해보았습니다. 이번 포스팅부터는 Jetpack을 이루는 각각의 Library에 대해서 정리해보려고 합니다. Data Binding Data Binding이란 말 그대로 "데이터를 연
weirddev.tistory.com
이번에는 이전 포스팅에 이어서 추가 정리 해보려고 합니다.
Data Binding을 사용하여 UI에서 전달된 이벤트를 컨트롤 할 수 있습니다.
해당 기능은 2가지 방식으로 개발이 가능합니다.
Handler 함수에 직접 바인딩하는 방식. 컴파일에 생성되기 때문에, 함수가 없거나, xml에 정의된 부분이 에러가 있다면, 컴파일 에러가 발생한다.예시1) 함수 선언
class MyHandlers { fun onClickFriend(view: View) { ... } }
예시2) XML에서 사용 선언
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="handlers" type="com.example.MyHandlers"/> <variable name="user" type="com.example.User"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName}" android:onClick="@{handlers::onClickFriend}"/> </LinearLayout> </layout>
이벤트가 발생했을 때 실행하는 방식. Method binding과 유사하지만, 임의의 식을 작성할 수 있다.
예시1) 함수 선언
class Presenter { fun onSaveClick(task: Task){} }
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> ... </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{() -> presenter.onSaveClick(task)}" /> </LinearLayout> </layout>
표현식에서 콜백을 사용하면, 필요한 리스너를 자동생성한 후 이벤트에 등록합니다.
UI에서 이벤트를 전달하면, 표현식을 검사하여, null과 thread safety에 대한 안전성을 가져갑니다.
레이아웃 파일에 Import를 한 뒤에, 해당 클래스의 변수 등을 사용할 수 있습니다.
예시) View 클래스를 Import하여 해당 변수를 사용한 식을 작성
<data> <import type="android.view.View"/> </data> ... <TextView android:text="@{user.lastName}" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>
추가로, 동일한 클래스를 Import할 시 구분을 위해 alias도 지정할 수 있습니다.
예시)
<import type="android.view.View"/> <import type="com.example.real.estate.View" alias="Vista"/>
또한, 여러개의 클래스를 Import한 후 서로 타입을 참조할 수 있습니다.
예시) User 클래스와 List 클래스를 Import한 후 userList 변수 선언 및 사용
<data> <import type="com.example.User"/> <import type="java.util.List"/> <variable name="user" type="User"/> <variable name="userList" type="List<User>"/> </data>
마지막으로, Import한 클래스로 캐스팅하거나, 정적 변수나 함수를 사용할 수도 있습니다.
레이아웃 파일에서 Data 요소에 변수를 선언하여 사용할 수 있습니다.예시)
<data> <import type="android.graphics.drawable.Drawable"/> <variable name="user" type="com.example.User"/> <variable name="image" type="Drawable"/> <variable name="note" type="String"/> </data>
사용중인 레이아웃에서 xml파일을 추가하여 사용할 수 있습니다.예시) name, contact라는 이름의 레이아웃에 user 변수를 전달합니다.
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/apk/res-auto"> <data> <variable name="user" type="com.example.User"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/name" bind:user="@{user}"/> <include layout="@layout/contact" bind:user="@{user}"/> </LinearLayout> </layout>
다음 포스팅에서는 Data Binding의 Observable 관련 내용을 정리하겠습니다.
[Android] Jetpack - Data Binding - 2
이전 포스팅에서는 Data Binding에 대해 간략하게 살펴보았습니다.
[Android] Jetpack - Data Binding - 1
이전 포스팅에서는 Jetpack에 대한 간략한 정리를 해보았습니다. 이번 포스팅부터는 Jetpack을 이루는 각각의 Library에 대해서 정리해보려고 합니다. Data Binding Data Binding이란 말 그대로 "데이터를 연
weirddev.tistory.com
이번에는 이전 포스팅에 이어서 추가 정리 해보려고 합니다.
Event Handling
Data Binding을 사용하여 UI에서 전달된 이벤트를 컨트롤 할 수 있습니다.
해당 기능은 2가지 방식으로 개발이 가능합니다.
Method reference
Handler 함수에 직접 바인딩하는 방식. 컴파일에 생성되기 때문에, 함수가 없거나, xml에 정의된 부분이 에러가 있다면, 컴파일 에러가 발생한다.
예시1) 함수 선언
예시2) XML에서 사용 선언
Listener bindings
이벤트가 발생했을 때 실행하는 방식. Method binding과 유사하지만, 임의의 식을 작성할 수 있다.
예시1) 함수 선언
예시2) XML에서 사용 선언
표현식에서 콜백을 사용하면, 필요한 리스너를 자동생성한 후 이벤트에 등록합니다.
UI에서 이벤트를 전달하면, 표현식을 검사하여, null과 thread safety에 대한 안전성을 가져갑니다.
Imports, variables, and includes
Imports
레이아웃 파일에 Import를 한 뒤에, 해당 클래스의 변수 등을 사용할 수 있습니다.
예시) View 클래스를 Import하여 해당 변수를 사용한 식을 작성
추가로, 동일한 클래스를 Import할 시 구분을 위해 alias도 지정할 수 있습니다.
예시)
또한, 여러개의 클래스를 Import한 후 서로 타입을 참조할 수 있습니다.
예시) User 클래스와 List 클래스를 Import한 후 userList 변수 선언 및 사용
마지막으로, Import한 클래스로 캐스팅하거나, 정적 변수나 함수를 사용할 수도 있습니다.
Variables
레이아웃 파일에서 Data 요소에 변수를 선언하여 사용할 수 있습니다.
예시)
Include
사용중인 레이아웃에서 xml파일을 추가하여 사용할 수 있습니다.
예시) name, contact라는 이름의 레이아웃에 user 변수를 전달합니다.
다음 포스팅에서는 Data Binding의 Observable 관련 내용을 정리하겠습니다.
'DEV > Android' 카테고리의 다른 글