[Andoird] 5. MVVM에 EditText 사용하기!

in #kr7 years ago (edited)

android_title_image.jpg

EditText

EditText는 디바이스의 키보드를 이용하여 문자를 입력하는 뷰입니다. 입력하는 값은 문자, 특수문자, 숫자등 으로 다양하지만 EditText가 입력 받고 반환하는 값은 오직 String(문자열)입니다. EditText 값을 반환받아 적절한 변수형으로 변환하여 사용해야 합니다.

<EditText
        style="@style/edittext_large"
        android:layout_margin="5dp"
        android:text="@={vm.message}"/>

EditText에 값을 적용하는 방법은 TextView와 동일합니다. 다만 TextView에서는 android:text="@{vm.message}였고 EditText에서는android:text="@={vm.message}"으로 @옆에=을 추가해 줍니다. 추가 이유는 EditText에 입력 받은 값을 바로 message 데이터에 적용해주기 때문입니다.

입력한 문자 확인하기

EditText에 입력된 문자를 확인하기 위해서는 TextWatcher인터페이스가 필요합니다.

    editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

기존에는 위와 같은 형식으로 TextWatcher를 바로 리스너로 등록했습니다.

DataBinding에서는 기존의 TextWatcher방식과 메소드 방식이 있습니다.

DataBinding TextWatcher

DataBinding에 TextWatcher적용은 기존 방식과 거의 동일합니다. 다만 변수형태로 만들어 주면 됩니다.

    public TextWatcher watcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    };

그리고 EditText에 적용해 주면 됩니다.

    <EditText
        style="@style/edittext_large"
        android:layout_margin="5dp"
        android:addTextChangedListener="@{vm.watcher}"
        android:text="@{vm.message}"/>

DataBinding 메소드 방식

메소드 방식은 TextWatcheronTextChanged()콜백 메소드 값만 받아 올 수 있습니다. 여기서 주의할 점은 반환값 및 파라미터가 완전히 동일해야 오류가 발생하지 안습니다.

    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }

EditText에 적용하는 방법은 다음과 같습니다.

    <EditText
        style="@style/edittext_large"
        android:layout_margin="5dp"
        android:onTextChanged="@{vm::onTextChanged}"
        android:text="@{vm.message}"/>

AndroidStudy 예제

Sort:  

가상화폐 평가에서 스팀이 B-래요! (5위)
^^
좋은 컨텐츠가 즐거운 스티밋을 만드는거 아시죠?

감사합니다~ 꾸준히 좋은 컨텐츠 올리도록 하겠습니다~

Coin Marketplace

STEEM 0.21
TRX 0.26
JST 0.040
BTC 101164.87
ETH 3696.45
USDT 1.00
SBD 3.19