Android 공부

안드로이드 2way DataBinding

0. 이전 글:


2018/12/04 - [Android 공부] - 안드로이드 DataBinding?? MVVM??



1. 문제점:


1-1. 코드:


<EditText
            android:id="@+id/userInputET"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="8dp"
            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.169" />
<Button
            android:id="@+id/loginBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/userInputET"
            app:layout_constraintVertical_bias="0.056"
            android:onClick="@{(view) -> userVM.updateTextView(userIdTextView,userInputET)}"/>




1-2. 문제 :


EditText의 text를 뽑아내고 싶었지만, 그럴 수 없었고 차선책으로 Button에서 click시에

userVM.updateTextView()라는 매소드에 EditText를 변수로 해서 이동시켜서 getText() 했었습니다.


2-1. 개선사항:


2way databinding을 이용하게 되면 우리가 관리하고 있는 변수에 xml의 값을 넣을 수 있다는 것을 알 수 있었습니다.


2-2. 출처:


https://developer.android.com/topic/libraries/data-binding/two-way


2-3. 개선된 코드:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<EditText
            android:id="@+id/userInputET"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@={userVM.userInfos.currentName}"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="8dp"
            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.169" />
 
        <Button
            android:id="@+id/loginBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/userInputET"
            app:layout_constraintVertical_bias="0.056"
            android:onClick="@{(view) -> userVM.updateTextView(userIdTextView)}"/>
cs


2-4. 해석 :


5번 째 줄에, @={data}를 통해서 editText의 값을 넣을 수 있다는 것을 확인했고,

해당 변수는 MutableLivedata<String>으로 onClick시에 updateTextView()를 통해서

해당 변수를 호출해서 textView에 값을 set할 수 있다.