오늘 소개할 기술은 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/

'안드로이드 > JetPack' 카테고리의 다른 글

Data Binidng -02 Event  (0) 2018.05.24
Posted by 자바리즘
,