Android/Study

[Android] SearchView 사용기

Tenacity_Dev 2024. 6. 24. 18:50
728x90

이번에는 저번 프로젝트에서 사용했던 View에 대해서 또 다른 것을 정리를 해보려고한다.

 

바로 SearchView이다. 우리가 원하는 콘텐트 혹은 스트링을 찾기 위해서 사용하는 SearchView이다. 이를 실제로 Android에서 어떤식으로 사용하였는지 그리고 어떻게 사용할 것인지에 대해서 또 공부해보자.

 

SearchView란

SearchView는 안드로이드 애플리케이션에서 검색 인터페이스를 제공하는 위젯이다. 이는 사용자가 텍스트를 입력하여 데이터를 검색할 수 있게 해주는 기능을 제공하며, 주로 툴바나 액션바에 통합되어 사용된다. SearchView는 사용자의 입력을 받아 검색 쿼리를 처리하고 결과를 제공하는 역할을 한다.

 

SearchView 사용기

XML

        <androidx.appcompat.widget.SearchView
                android:id="@+id/search_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:iconifiedByDefault="false"
                app:layout_constraintStart_toEndOf="@+id/textView"
                app:queryHint="@string/searchHint" />

 

app:iconifiedByDefault="false"

  • SearchView가 기본적으로 축소된 상태로 표시될지 여부를 설정한다. false로 설정하면 SearchView는 기본적으로 확장된 상태로 표시된다.

app:queryHint="@string/searchHint"

  • 검색 입력란에 표시될 힌트 텍스트를 설정한다. @string/searchHint는 문자열 리소스 파일에서 정의된 힌트를 참조한다.

 

Activity

    private fun initSearchView() {
        binding.searchView.setQuery(frontQuery, false)
        binding.searchView.isSubmitButtonEnabled = true
        binding.searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            override fun onQueryTextSubmit(query: String?): Boolean {
                if (query != null) {
                    if (viewModel.uiState.value.searchToMap) {
                        val company = emptyList<CompanyEntity>()
                        viewModel.updateMapToSearch()
                        replaceMapFragment(company)
                        hideKeyboard()
                    } else {
                        replaceSearchFragment(query)
                        viewModel.updateSearchToMap()
                        frontQuery = query
                    }
                }
                return true
            }

            override fun onQueryTextChange(newText: String?): Boolean {
                return false
            }
        })
    }

binding.searchView.setQuery(frontQuery, false):

SearchView에 기존 검색 쿼리 (frontQuery)를 설정한다. 두 번째 매개변수 false는 설정 후 검색을 실행하지 않도록 한다.

 

binding.searchView.isSubmitButtonEnabled = true:

SearchView의 제출 버튼을 활성화한다. 이를 통해 사용자가 검색 버튼을 눌러 검색을 제출할 수 있다.

 

binding.searchView.setOnQueryTextListener:

SearchView에 OnQueryTextListener를 설정하여 검색 쿼리 제출 및 변경 이벤트를 처리한다.

 

onQueryTextSubmit(query: String?):

사용자가 검색 쿼리를 제출했을 때 호출된다.

 

onQueryTextChange(newText: String?):

검색 텍스트가 변경될 때 호출된다. 현재 구현에서는 아무 동작도 하지 않고 false를 반환합니다.

 

만약 onQueryTextChange를 True로 놓고 비동기처리로 UI의 반응형 로직으로 처리한다면 사용자가 텍스트를 입력할 때마다 관련 검색어를 실시간으로 보여줄 수 있다.

 

아쉬웠던 점

조금만 더 공부했더라면 SearchView에서도 반응형 UI를 구현할 수 있었을텐데 그러질 못했다.

 

728x90