header-img
Info :
  1. 내가 사용했던 부분
  2. XML에서 용법
  3. Binding Adapter
  4. Reference

면접기록용 Data Binding 정리

 

Data Binding은 xml 파일에 data를 연결해서 사용할 수 있도록 도와주는 것으로 MVVM 패턴을 구현할 때 LiveData와 함께 거의 필수적으로 사용됨. 데이터 바인딩의 장점은 글루 코드를 줄일 수 있음. 레이아웃과 데이터를 연결하기 위한 코드들을 줄일 수 있음.

 

내가 사용했던 부분

<?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.shootit.greme.viewmodel.MainViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.view.MainActivity">
// ...
<TextView
android:id="@+id/tvPageName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/BoldText"
android:text="@{viewModel.currentPage.text}"
// ...
/>
// ...
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

전체를 <layout> 태그로 감싸주고 <data> </data> 태그 사이에 <variable> 태그로 데이터 바인딩에 필요한 변수를 선언해줌. 나는 viewmodel을 데이터 바인딩에 필요한 변수로 사용할 예정이어서 다음과 같이 해줌.

class MainActivity : BaseActivity<ActivityMainBinding>(R.layout.activity_main) {
override val viewModel by viewModels<MainViewModel> {
MainViewModel.MainViewModelFactory(/* 필요한 정보 */)
}
override fun initViewModel(viewModel: ViewModel) {
binding.lifecycleOwner = this@MainActivity
binding.viewModel = this.viewModel
}
// ...
}

그리고 main activity 클래스에서 뷰모델 만들어주고 이를 xml 상에서 선언했던 variable인 viewmodel에 넣어줌.

class MainViewModel(private val tmp: String): ViewModel() {
// ...
var currentPage = MutableLiveData<MainFragmentEnum>(MainFragmentEnum.HomeFragment)
}

ViewModel 클래스에서는 다음과 같이 사용함. currentPage 변수의 값이 바뀔 때마다 XML 상에서도 반영이 됨.

XML에서 용법

값 자체를 사용할 때

android:text="@{변수명}"

기본 값 설정

android:text="@{변수명, default=기본값}"

함수 설정

android:onClick="@{() -> vm.함수명()}"

조건문 사용

// 삼항 연산자 사용
android:text="@{String.valueOf(변수 == null ? 0 : 1)}"

 

Binding Adapter

안 썼음.

https://todaycode.tistory.com/53

 

Reference

https://velog.io/@jojo_devstory/Android-Databinding을-알아보자

https://velog.io/@changhee09/안드로이드-Data-Binding

https://show-me-the-money.tistory.com/entry/Android-Data-Binding-기본-활용법-총정리

더보기
CS/Android, Kotlin