Dev/Android

XML 에서 뷰모델을 활용해서 텍스트 변경, ViewModel Pattern

healthyryu 2021. 5. 18. 12:52

 

작업 설명

ViewModel 을 활용해서 XML 상에서 TextView 의 text attribute 를 변경하는 작업을 해볼 예정입니다.


1. 시나리오

복약정보를 나타내는 Dialog에서 Switch버튼에 따라서 특정 텍스트 변경하도록 처리

 

2. 해결 방법

처음에는 xml 에서만 처리하는 방법을 찾았는데 찾지 못했습니다. 그래서 Switch버튼의 checked 여부를 viewModel 에 전달해서 해당 정보를 xml 에 전달하도록 했다.

 

 

 

ViewModel

val switchMedication = ObservableField<Boolean>()
...

fun updateSwitchMedication(isMedication: Boolean) {
	switchMedication.set(isMedication)
}

xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:bind="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="viewModel"
            type="ViewModel 경로" />
    </data>
	...
	
    <TextView
    	android:id="@+id/tv"
        android:text="@{viewModel.switchMedication ? "복약완료" : "복약예정"}"
    />
    
    <androidx.appcompat.widget.SwitchCompat
        android:onCheckedChanged="@{(_, isChecked) -> viewModel.updateSwitchMedication(isChecked)}"
        />
    
    ...

</layout>

 

3. 결론

해방 방법을 번거로울 수는 있지만, 명확하게 정해진 String 을 지저분하게 Activity에 표시하지 않아도 된다는 장점이 존재한다.

반응형