Notice
Recent Posts
Recent Comments
Link
투케이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
}
}
[결과 출력]
반응형
'Android' 카테고리의 다른 글
Comments