Android/Android
[Android] Two - way Data Binding
Cha_Ji
2022. 1. 19. 21:38
Data Binding
- 먼저 데이터 바인딩에 대해 간략히 이야기하자면, xml위에서 코딩하는 방식입니다.
- 선언적 형식으로 앱의 데이터 소스와 UI의 구성요소를 결합합니다.
class ViewModel {
var text = "123"
}
<variable
name="vm"
type="com.ex.viewModel"/>
<TextView
android:text="@{vm.text}"/>
- 위와 같은 두 코드가 있을 때, Activity나 Fragment에서 따로 코드를 작성하지 않아도, viewModel에 있는 text 123을 xml의 TextView에 띄울 수 있습니다.
Two-way Data binding
UI에서 데이터 소스를 조작, 데이터 소스를 UI에 반영하는 두 방식을 동시에
- xml에서 특정 함수를 실행시키거나 특정 반환값을 사용하는 것은 단방향 데이터 바인딩에서도 할 수 있습니다.
- View의 변경사항을 ViewModel에 저장하고, 동시에 View에도 보이게 하려면 어떻게 해야할까요?
- checkBox로 예시를 들자면, ViewModel은 항상 체크여부를 알아야하며 checkBox 역시 클릭될 때마다 체크박스가 반전됩니다.
<CheckBox
android:checked="@{vm.checked}"
android:onCheckChanged="@{vm.check}"/>
- 위 코드처럼 체크여부를 저장하고, 체크를 갱신해야합니다.
- 하지만 양방향 데이터 바인딩 방식을 사용한다면?
<CheckBox
android:checked="@={vm.checked}"/>
- 체크할 때마다 데이터가 업데이트되며 데이터가 다시 View에 적용되기 까지 합니다.
- 양방향 데이터 바인딩 방식은 기존 방식의
@
기호 이후에=
기호를 붙여주면 됩니다.
끝으로
- 양방향 데이터 바인딩은 말그대로 양쪽에서 조작할 수 있기 때문에 무한루프가 끝나지 않는 것을 조심해야 합니다.