본문 바로가기

Android

EditText imeOption=

EditText 에서 done 또는 search 버튼을 선택하면 databinding 을 하려고 하는데 제대로된 글이 일단 없다.
혹시나해서 google code 에 data binding 쪽 소스를 찾아봤는데
https://android.googlesource.com/platform/frameworks/data-binding/+/master/extensions/baseAdapters/src/main/java/android/databinding/adapters
@BindingMethods 이 선언은 되어 있지만 동작 불가..

그래서 일단 binding adapter 를 만들어 봤고 동작 확인은 했다.
EditText 에 리스너는 내가 직접 등록 하고 callback 만 전달 하는 형태로 하기로 설계하고
코드를 아래와 같이 작성하였고

object EditTextBindingAdapter {
    @JvmStatic
    @BindingAdapter("bindEditorAction")
    fun bindEditorAction(view: TextView, callback: (String) -> Boolean) {
        view.setOnEditorActionListener { _, id, _ ->
            when (id) {
                EditorInfo.IME_ACTION_DONE,
                EditorInfo.IME_ACTION_SEARCH -> {
                    callback(view.text.toString())
                }
                else -> false
            }
        }
    }
}

인자는 callback: (String) -> Boolean 형태로 고차함수로 받고

view model 은 val editorAction = ObservableField<(String?) -> Boolean>() 이렇게 선언한 뒤
아래와 같이 초기화 하면 set 내 고차 함수로 callback 이 전달 되게 된다.
editorAction.set {
            // TODO
            true
}

마지막으로 xml 에 app:bindEditorAction="@{model.editorAction}" 를 추가하면
문제 없이 잘 된다.

'Android' 카테고리의 다른 글

dagger + retrofiit + baseurl 이 다수일때  (0) 2018.12.11
kotlin + dagger2 + shared preferences  (0) 2018.12.11
간만에 어이 없는 삽질..  (0) 2018.10.30
간만에 어이 없는 삽질..  (0) 2018.10.29
github blog  (0) 2018.10.25