Nuke Olaf - Log Store
[Android] 안드로이드 - 고차함수 사용하여 SearchView BindingAdpater 만들기 (feat. dataBinding) 본문
Android
[Android] 안드로이드 - 고차함수 사용하여 SearchView BindingAdpater 만들기 (feat. dataBinding)
NukeOlaf 2020. 5. 4. 06:32SearchView 에 setOnQueryListener 를 BindingAdpater 로 달아줄 수 있다.
interface 로 setOnQueryListener 리스너 객체를 전달하여 BindingAdapter 를 만들수도 있지만, 코틀린은 함수형 언어인 만큼 고차함수를 사용하여 만들어보도록 하자.
1. activity_main.xml (constraint 는 코드량이 많아서 linear 로 만들었다)
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="activity"
type="com.olaf.nukeolaf.MainActivity" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.MainActivity">
<androidx.appcompat.widget.SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:iconifiedByDefault="false"
app:queryHint="검색어를 입력하시오"
app:setOnQueryTextListener="@{activity.searchMovie}" />
</LinearLayout>
</layout>
2. MainActivity.kt
package com.olaf.nukeolaf
class MainActivity : AppCompatActivity() {
val searchMovie = { query: String? ->
// 검색하는 코드 작성...
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(
this,
R.layout.activity_main
)
binding.activity = this
}
}
3. BindingAdapter.kt
@BindingAdapter("setOnQueryTextListener")
fun setOnQueryTextListener(view: SearchView, searchMovie: (String?) -> Unit) {
view.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
searchMovie(query)
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
return false
}
})
}
참고 사이트 >>>
'Android' 카테고리의 다른 글
[Android] 안드로이드 - 네트워크 타임아웃 시간 설정 (0) | 2020.05.05 |
---|---|
[Android] 안드로이드 - 키보드 올리기, 내리기 (soft input) (0) | 2020.05.05 |
[Android] 안드로이드 - Data Binding 사용시 리사이클러뷰 레이아웃이 이상해질 때 (0) | 2020.05.04 |
[Android] 안드로이드 - 리사이클러뷰 Data Binding 으로 리팩토링하기 (1) | 2020.05.03 |
[Android] 안드로이드 - Data Binding 데이터 바인딩이란 ? (2) | 2020.05.02 |
Comments