사용안하는 게시판/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));
        });
    }
}