투케이2K

331. (AndroidStudio/android/java) DataBinding 데이터 바인딩 사용해 xml 과 Model 모델 클래스 객체간 데이터 동기화 실시 본문

Android

331. (AndroidStudio/android/java) DataBinding 데이터 바인딩 사용해 xml 과 Model 모델 클래스 객체간 데이터 동기화 실시

투케이2K 2022. 8. 29. 09:24

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : java

 

[클래스 구조]

 

[Model : 소스 코드]

package com.example.testapp.binding;

public class Model {


    // [전역 변수 선언]
    private String name;


    // [클래스 생성자 초기화]
    public Model (String name){
        this.name = name;
    }


    // [getter 메소드 지정 실시]
    public String getName (){
        return name;
    }
}
 

[Activity_Class : 소스 코드]

package com.example.testapp.binding;

import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;

import com.example.testapp.R;
import com.example.testapp.databinding.ActivityMainBinding;

public class Activity_Class extends AppCompatActivity {


    /**
     * TODO [클래스 설명]
     * // -----------------------------------------
     * 1. Model <-> Xml 데이터 바인딩 수행 액티비티
     * // -----------------------------------------
     * 2. build.gradle (Module) 설정 :
     *
     *  // [Android Studio 4.0 버전 이상]
     *  buildFeatures {
     *      dataBinding = true
     *  }
     *
     *
     *  // [Android Studio 4.0 버전 미만]
     *  dataBinding {
     *      enabled= true
     *  }
     * // -----------------------------------------
     * */





    // TODO [전역 변수 선언 실시]
    private static final String ACTIVITY_NAME = "Activity";





    // TODO [컴포넌트 선언 실시]





    // TODO [액티비티 생명 주기 상태 체크 메소드]
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // [데이터 바인딩 액티비티 레이아웃 지정 실시]
        ActivityMainBinding binding = DataBindingUtil.setContentView(Activity_Class.this, R.layout.a_data_binding_layout);
        //setContentView(R.layout.a_data_binding_layout);

        Log.i("---","---");
        Log.d("//===========//","================================================");
        Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onCreate() :: 액티비티 수행 실시]");
        Log.d("//===========//","================================================");
        Log.i("---","---");


        // [데이터 바인딩 모델 클래스 생성자 초기화 실시]
        binding.setModel(new Model("투케이"));


    } // TODO [메인 종료]





    // TODO [액티비티 생명 주기 상태 체크 메소드]
    @Override
    public void onResume(){
        super.onResume();
        Log.i("---","---");
        Log.d("//===========//","================================================");
        Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onResume() :: 액티비티 실행 준비]");
        Log.d("//===========//","================================================");
        Log.i("---","---");
    }





    // TODO [액티비티 생명 주기 상태 체크 메소드]
    @Override
    public void onPause(){
        super.onPause();
        Log.i("---","---");
        Log.e("//===========//","================================================");
        Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onPause() :: 액티비티 정지 상태]");
        Log.e("//===========//","================================================");
        Log.i("---","---");
    }





    // TODO [액티비티 생명 주기 상태 체크 메소드]
    @Override
    public void onDestroy(){
        super.onDestroy();
        Log.i("---","---");
        Log.e("//===========//","================================================");
        Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onDestroy() :: 액티비티 종료 상태]");
        Log.e("//===========//","================================================");
        Log.i("---","---");
    }


} // TODO [클래스 종료]
 

[xml 레이아웃 : 소스 코드]

<?xml version="1.0" encoding="utf-8"?>
<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. xml 파일에서 데이터 바인딩을 사용하기 위해서는 root 설정을 [layout] 으로 해야합니다
     2. xml 파일에서 데이터 바인딩을 사용하기 위해서는 사용하려는 Model 을 variable 로 참조합니다
     3. 모델 데이터 참조 예시 : @{model.name}
     -->


    <data class=".databinding.ActivityMainBinding">
        <!-- 데이터 바인딩으로 연결할 객체를 이 레이아웃에서는 model 라는 이름으로 설정  -->
        <variable
            name= "model"
            type= "com.example.testapp.binding.Model" />
    </data>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textAlignment="center"
            android:gravity="center"
            android:textSize="20dp"
            android:textStyle="bold"

            android:text="@{model.name}"/>

    </LinearLayout>

</layout>
 

[build.gradle (Module) : 소스 코드]

android {
    compileSdk 30

    defaultConfig {
        applicationId "com.example.testapp"
        minSdk 21
        targetSdk 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }


    // TODO [데이터 바인딩 사용 설정]
    // [Android Studio 4.0 버전 이상]
    buildFeatures {
        dataBinding=true
    }

    // [Android Studio 4.0 버전 미만]
    dataBinding {
        enabled=true
    }
}
 

[결과 출력]

 

 

반응형
Comments