일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |
Tags
- 안드로이드13
- 재사용
- 안드로이드
- 구분선
- Android
- viewholder
- 고차함수
- ActivityTestRule
- searchview
- LayoutManger
- Error:Execution failed for task ':app:mergeDebugResources'
- 안드로이드스튜디오
- 스와이프
- 뷰변경 감지
- fragment
- Fragment 수동 추가
- adapter
- IntentTestRule
- 안드로이드개발레벨업교과서
- binding adapter
- ui test
- 테마 아이콘
- recyclerview
- high order function
- Fragment에서 Activity의 함수 사용하기
- espresso
- 생명주기
- 코틀린
- 코딜리티
- 리사이클러뷰
Archives
- Today
- Total
룬아님의 취중코딩
SearchView and Databinding with high order function 본문
SearchView를 Databinding 하기 위해 bindingAdapter를 구현하고 리스너를 구현하기 위해 함수를 인자로 넘겨주는 방법을 소개한다.
이 코드의 목적은 활성화 된 SearchView에 값을 입력하고 키보드의 검색 버튼을 눌렀을 때 자신이 원하는 함수를 호출하도록 하는 것이다.
1. SearchFragment.kt
val searchRepositoryByKeyWord = fun(searchKeyWord: String) {
CoroutineScope(Dispatchers.Main).launch {
val result = searchRepositoriesUseCase(searchKeyWord)
if (result is Success) {
_items.value = result.data.repositories
}
}
}
고차함수로 사용하기 위한 함수를 선언한다. 해당 함수는 searchKeyWord를 인자로 받아 해당 키워드로 검색한 결과를 리스트 아이템에 삽입해주는 기능을 한다.
2. SearchListBinding.kt
@BindingAdapter("app:setOnQueryTextListener")
fun setOnQueryTextListener(searchView: SearchView, searchByKeyWord: (String) -> Unit) {
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String?): Boolean {
return false
}
override fun onQueryTextSubmit(query: String?): Boolean {
query?.let { keyWord ->
searchByKeyWord(keyWord)
}
return false
}
})
}
BindingAdapter를 만들어준다. 함수를 인자로 받아 setOnQueryTextListener의 onQueryTextSubmit이 호출 될때에 해당 keyWord로 인자로 받은 함수를 실행시키는 고차함수다.
3. search_fragment.xml
<androidx.appcompat.widget.SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:iconifiedByDefault="false"
app:setOnQueryTextListener="@{fragment.searchRepositoryByKeyWord}" />
iconifiedByDefault를 false로 하게 되면 아이콘화 되지 않고 항상 확장되어 있는 상태가 된다.
또한 아까 구현한 BindingAdapter를 이용하여 SearchFragment에서 만들어 두었던 searchRepositoryByKeyWord 함수를 인자로 넘겨주면 Databinding을 이용하여 SearchView의 setOnQueryTextListener을 구현하고 원하는 함수를 넘겨서 호출할 수 있다.
반응형
'개발 > 안드로이드 개발' 카테고리의 다른 글
(Databinding) databinding으로 2개의 문자열을 같이 사용하는 법 (0) | 2019.10.30 |
---|---|
안드로이드 권한 요청 구현하고 예외 처리 하기 (0) | 2019.10.29 |
(레포지토리 패턴) local과 remote 중 하나에서만 작동하는 기능이 필요할 때 (0) | 2019.10.28 |
(Koin) BroadcastReceiver에서 inject()를 사용할 수 없는 문제 (0) | 2019.10.24 |
Duplicate files copied in APK 에러 해결 방법 (0) | 2019.10.24 |
Comments