오늘 소개할 기술은 Data-Binding 이다.
#App 모듈의 build.gradle 에 아래의 구문을 추가하자.
android {
...
dataBinding {
enabled = true
}
...
}
#레이아웃
반드시 <layout> 태그로 시작해야 합니다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<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}"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
</LinearLayout>
</layout>
data 태그안의 variable 태그에서 name 은 별칭이고, type 은 해당 클래스의 패키지명입니다.
TextView 에서 @{user.firstName} 이 선언된 부분을 보면 variable 의 name 을 참조해서 firstName 에 접근하는 것을 확인할 수 있습니다.
public class User {
private final String firstName;
private final String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
}
User 클래스가 구현된 코드 입니다. @{user.firstName} 은 사실상 getter 함수인 getFirstName() 에 접근합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
User user = new User("Test", "User");
binding.setUser(user);
}
위에 선언된 레이아웃 파일 이름이 main_activity.xml 이라면 바인딩 클래스의 이름은 이 레이아웃 파일이름을 기준으로 자동생성이 됩니다. MainActivityBinding 이라는 이름을 참조할 수 있게 됩니다.
예를 들면, data_layout.xml 이라고 이름 짓게 되면 바인딩 클래스는 DataLayoutBinding 이라는 이름으로 생성이 됩니다.
val binding = DataBindingUtil
.setContentView<DataBindLayoutBinding>(this, R.layoutdata_bind_layout)
val user = User("Test", "User")
binding.user = user
위와 같은 형식의 코틀린 코드
Run 시킨 화면
출처 : https://developer.android.com/topic/libraries/data-binding/