- 단방향 데이터 바인딩을 사용하여 사용자에게 일부 데이터 (앱 대 사용자 데이터 흐름)를 표시 할 수 있습니다.
- 또한 단방향 데이터 바인딩을 사용하여 사용자 입력 (사용자 대 앱 데이터 흐름)을 얻을 수도 있습니다.
- 그러나 때로는 동일한 위젯을 통해 데이터를 표시하고 사용자 입력을 받고 싶을 때도 있습니다.
- 즉, 양방향 데이터 흐름이 필요한 경우 양방향 데이터 바인딩을 사용해야합니다.
간단한 양방향 데이터 바인딩 프로젝트 예제
새 Android Studio 프로젝트를 생성하여 시작하겠습니다. TwoWayDataBinding 데모로 이름을 지정합니다.
1 단계
먼저 앱 수준 build.gradle 파일에서 데이터 바인딩을 활성화해야합니다. 이 코드 부분을 android 블록 안에 작성하십시오.
buildFeatures{
dataBinding true
}
또한 kotlin-kapt 플러그인을 플러그인 블록에 추가하십시오.
id 'kotlin-kapt'
다음으로 ViewModel 및 LiveData에 필요한 종속성을 추가해야합니다.
def lifecycle_version = "2.3.0"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
그 후, gradle을 동기화하십시오.
다음은 최종 앱 수준 build.gradle 파일입니다.
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.anushka.twowaydatabindingdemo"
minSdkVersion 26
targetSdkVersion 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
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures{
dataBinding true
}
}
dependencies {
def lifecycle_version = "2.3.0"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
2 단계
다음으로 새 Kotlin 클래스를 만들고 이름을 User로 지정합니다. 이것을 데이터 클래스로 만들어 봅시다. 그리고 두 개의 변수를 "이름"과 "이메일"로 추가합니다. 이를 데이터 바인딩 개체와 함께 사용합니다.
User.kt
data class User(
var name: String,
var email: String
)
3 단계
그 후 ViewModel 클래스를 만들 것입니다. 그리고 여기에 MutableLiveData 변수를 추가하여 사용자 이름을 보관합니다.
따라서 새 Kotlin 클래스를 만들고 MainActivityViewModel로 이름을 지정합니다. 이 클래스는 ViewModel ()을 확장해야합니다.
class MainActivityViewModel : ViewModel() {
val userName = MutableLiveData<String>()
}
4 단계
그런 다음 activity_main.xml 파일을 엽니 다.
일반적으로 android studio는 defalult에 의해 TextView를 추가합니다. (없으면 TextView를 드래그 앤 드롭)
그런 다음 EditText를 해당 TextView의 맨 아래로 끌어다 놓습니다.
사용자가 제약 조건을 자동으로 설정하는 제약 조건 추론 버튼.
이 레이아웃에서 데이터 바인딩을 사용하려면 <layout> </ layout> 태그를 레이아웃의 가장 바깥 쪽 태그 로 추가하세요.
그런 다음 "User"유형의 레이아웃 변수를 추가합니다. (방금 생성 한 데이터 클래스)
<data>
<variable
name="viewModel"
type="com.anushka.twowaydatabindingdemo.MainActivityViewModel" />
</data>
마지막으로 레이아웃 표현식을 사용하여 ViewModel의 변수로 TextView와 EditText를 바인딩 (양방향 바인딩)합니다.
TextView에서 "text"속성 값을 ViewModel의 "userName"(MutableLiveData) 속성과 바인딩합니다.
android : text = "@ = {viewModel.userName}"
다시, EditText에서 "text"속성의 값을 ViewModel의 "userName"(MutableLiveData) 속성과 바인딩합니다.
android : text = "@ = {viewModel.userName}"
그래서 이것은 나의 완전한 activity_main.xml 파일입니다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.anushka.twowaydatabindingdemo.MainActivityViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@={viewModel.userName}"
android:textSize="40sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.525"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.663" />
<EditText
android:id="@+id/edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="@={viewModel.userName}"
android:textSize="40sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.271" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
단방향 데이터 바인딩과 양방향 데이터 바인딩의 차이점 (XML)
- 단방향 데이터 바인딩을 사용할 때 중괄호 앞에 "@"만 사용합니다. "@ {viewModel.userName}"
- 그러나 양방향 데이터 바인딩의 경우 중괄호 앞에 "@"및 "="를 사용합니다. "@ = {viewModel.userName}"
5 단계
다음으로 MainActivity.kt를 엽니 다.
먼저 Data Binding 개체로 작업 할 것이므로 프로젝트를 다시 빌드 합니다 (Build => Rebuild Project).
MainActivity (또는 모든 활동)에서 데이터 바인딩, ViewModel 및 LiveData로 작업 할 때 4 가지 일반적인 작업을 수행합니다.
- 레이아웃의 Data Binding 클래스의 인스턴스 (객체)를 생성합니다. (ActivityMainBinding)
- ViewModel 클래스의 인스턴스 (객체)를 생성합니다. (MainActivityViewModel)
- ViewModel 인스턴스를 Data Binding 인스턴스에 전달 (전송)합니다.
- 데이터 바인딩 인스턴스의 라이프 사이클 소유자를 설정합니다.
여기에 마지막 MainActivity.kt가 있습니다.
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var viewModel: MainActivityViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
binding.viewModel = viewModel
binding.lifecycleOwner = this
}
}
이제 앱을 실행하고 코드가 작동하는지 살펴볼 차례입니다.
처음에는 빈 EditText가 표시됩니다. 그것에 someting을 입력하십시오. 그러면 TextView에 동일한 텍스트가 동시에 표시됩니다. 이것이 양방향 데이터 바인딩의 마법입니다.
>>이 튜토리얼의 최종 코드 프로젝트를 다운로드하기위한 GITHUB 링크
AnushkaMadusanka/TwoWayDataBindingDemo
This is a simple project example created to demonstrate how android two way databinding works. Read the complete tutorial here. https://appdevnotes.com/android-two-way-data-binding-tutorial/ - Anus...
github.com
원문
https://appdevnotes.com/android-two-way-data-binding-tutorial/
'Android > MVVM' 카테고리의 다른 글
Data Binding with LiveData. (0) | 2021.05.20 |
---|---|
Live Data (0) | 2021.05.20 |
안드로이드 뷰모델 (0) | 2021.05.20 |
안드로이드 데이터 바인딩 (0) | 2021.05.20 |
02. MVVM 적용 샘플 #01 (0) | 2021.03.31 |