사용안하는 게시판/Android Project
DataBinding and ViewBinding
Everyday Growing Engineer
2022. 8. 12. 17:30
데이터 바인딩과 뷰바인딩
DataBinding :
1. build.gradle에 DataBinding 부분 추가
더보기
defaultConfig {
applicationId "com.example.aio_android"
minSdk 23
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
/* DataBinding 사용하기 위해 추가*/
dataBinding {
enabled = true
}
/* ViewBinding 사용하기 위해 추가*/
viewBinding {
enabled = true
}
}
2. xml에 추가 할 부분 :
- <layout> </layout>
- <data>
- @{ customName.customData }
더보기
<?xml version="1.0" encoding="utf-8"?>
<!-- Data Binding의 root는 <layout> -->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- 1. 레이아웃뷰와 바인딩할 데이터들 명칭과 클래스지정 -->
<data>
<!-- 데이터바인딩으로 연결할 User클래스 객체를 이 레이아웃에서는 user 라는 이름으로 참조하여 사용하겠다는 설정 -->
<variable
name="user"
type="AndroidBasic.JetPack.User" />
</data>
<!-- 2. 레이아웃 뷰 : 기존에 root로 만들었던 뷰 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:viewBindingIgnore="true"
android:padding="16dp">
<TextView
android:text="DataBinding과 ViewBinding이 적용되어 있습니다."
android:layout_width="match_parent"
android:layout_height="wrap_content" android:id="@+id/binding_textview1"
android:gravity="center"
android:fontFamily="@font/korean"
android:textSize="20sp"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp">
<TextView
android:text="이름 : "
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/textView4"
android:textSize="20sp"/>
<TextView
android:text="@{user.name}"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:id="@+id/binding_textview2"
android:gravity="center" android:fontFamily="@font/korean"
android:textSize="20sp"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<TextView
android:text="나이 : "
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/textView5"
android:textSize="20sp"/>
<TextView
android:text="@{String.valueOf(user.age)}"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:id="@+id/binding_textview3"
android:gravity="center"
android:textSize="20sp"/>
</LinearLayout>
</LinearLayout>
</layout>
ViewBinding :
1. build.gradle에 ViewBinding 부분 추가 (DataBinding 부분 참고)
2. Activity 부분
더보기
package AndroidBasic.JetPack;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.example.aio_android.databinding.DataAndViewBindingBinding;
/**
* DataBinding
* (1) build.gradle에 추가
* (2) android_data_and_view_binding.xml 확인
*
* ViewBinding
* (1) build.gradle에 추가
* (2) DataAndViewBinding.java 확인
*/
public class DataAndViewBinding extends AppCompatActivity {
DataAndViewBindingBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 첫번쨰 방법
binding = DataAndViewBindingBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
// --데이터 바인딩이 추가 됐을 경우 - 두번째 방법
// binding = DataBindingUtil.setContentView(this, R.layout.android_data_and_view_binding);
//binding을 통해 User 객체 업데이트
binding.setUser(new User("James", 32));
//editText를 통해 username과 age 변환
binding.bindingButton1.setOnClickListener(v -> {
String name = binding.bindingEdittext1.getText().toString();
int age = Integer.parseInt(binding.bindingEdittext2.getText().toString());
binding.setUser(new User(name, age));
});
}
}