본문 바로가기
TIL, WIL(일기)

231108 SearchView - onQueryTextChange

by 도슬 2023. 11. 9.

 

 

SearchView - onQueryTextChange를 이용한 검색 기능과, 검색어의 변화를 감지해서 이벤트를 처리할 수 있습니다.

 

Progress

with(binding) {
    communityMainSearchView.setOnQueryTextListener(object :
        androidx.appcompat.widget.SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(query: String?): Boolean {
            query?.let {
                commuViewModel.getFilteredBoard(query)
            }
            return false
        }

        override fun onQueryTextChange(newText: String?): Boolean {
            CoroutineScope(Dispatchers.Main).launch{
                if(newText == ""){
                    commuViewModel.getAllBoards()
                }
            }
            return false
        }
    })
}

 

 

1. setOnQueryTextListener : SearchView에대한 이벤트 리스너입니다.

2. onQueryTextListener :  텍스트 입력 및 검색을 처리하기위한 리스너(인터페이스) 입니다.

 

fun getFilteredBoard(query:String){
    val allList = _boards.value
    val filteredList = allList?.filter { it?.title?.contains(query) == true || it?.content?.contains(query) == true }
    filteredList?.let {
        _filteredBoards.value = it
    }
}

 

3. onQueryTextSubmit : 검색어를 입력하고 동작을 처리합니다. 

    - 위에서 검색어(query)를 viewModel에 넣어서 검색 결과를 받아옵니다.

    - 검색어(query)를 이용해서 모든 게시글을 불러온 후 contains를 이용해서 게시글의 제목이나 내용에 검색어(query)가 

    포함된 목록만 filteredList에 담아줍니다.

    - 검색결과를 라이브데이터에 넣어서 관리합니다.

 

suspend fun getAllBoards() {
    getAllBoardsUseCase.invoke().collect() {
        _boards.value = it.toEntity()
    }
}

 

4. onQueryTextChange : 검색어의 변경을 감지하고, 이벤트를 처리합니다. 

    - 빈칸일때 viewModel에 넣어서 모든데이터를 받아오도록 처리했습니다.

    - getAllBoardUseCase : 모든 게시글을 불러오는 UseCase입니다.

    - Flow를 이용했기때문에 collect()함수를 이용해서 데이터를 받습니다.

    - 받아온데이터를 라이브데이터를 이용해서 관리합니다.

 

 

Result

onQueryTextChange를 이용해서  

- 검색어를 실시간으로 감지할 수 있기때문에 원하는 이벤트를 처리할 수 있습니다.

- 위에서는 빈칸일때 모든 게시글이 나오도록 했지만, 실시간으로 검색어를 감지해서 검색버튼을 누르지 않고도 실시간으로 검색할 수 있고 유용하게 사용할 수 있습니다.

 

 

 

 

 

썸네일 출처

https://kr.freepik.com/free-photo/cute-ai-generated-cartoon-bunny_40572275.htm#page=2&query=%EA%B7%80%EC%97%AC%EC%9A%B4%20%EB%8F%99%EB%AC%BC&position=1&from_view=keyword&track=ais