면접기록용 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' 카테고리의 다른 글
[Android] OKHttp3를 사용한 헤더 추가, Retrofit2를 사용한 http 통신 (0) | 2023.04.16 |
---|---|
[Android] Custom View (0) | 2023.04.15 |
[Android] MVVM (0) | 2023.04.13 |
[Android] 안드로이드 리소스 (0) | 2023.04.07 |
[Android] AOS ART, Garbage Collector 방식 (0) | 2023.04.07 |