[kotlin] 코틀린 안드로이드에서 리사이클러뷰에 검색 기능 추가하기

안녕하세요! 안드로이드 앱을 개발하는데 리사이클러뷰에 검색 기능을 추가하고자 하는 경우가 있을 것입니다. 이 블로그 포스트에서는 코틀린으로 안드로이드 앱을 개발하면서 리사이클러뷰에 간단하게 검색 기능을 추가하는 방법을 살펴보겠습니다.

구현 단계

  1. 데이터 모델 클래스 작성: 먼저 리사이클러뷰에 표시될 데이터 모델 클래스를 작성합니다.

예시 코드:

data class Item(val name: String)
  1. 리사이클러뷰 어댑터 작성: 검색 기능을 추가하기 위해 기존의 리사이클러뷰 어댑터를 수정하거나 새로운 어댑터를 작성합니다.

예시 코드:

class ItemAdapter(private var itemList: List<Item>) : RecyclerView.Adapter<ItemAdapter.ViewHolder>() {
    // 어댑터 코드 작성
}
  1. 검색 기능 추가: 검색 기능을 추가하기 위해 Filterable 인터페이스를 구현하고 검색 기능을 처리하는 로직을 작성합니다.

예시 코드:

class ItemAdapter(private var itemList: List<Item>) : RecyclerView.Adapter<ItemAdapter.ViewHolder>(), Filterable {
    private var filteredList: List<Item> = itemList
    
    override fun getFilter(): Filter {
        return object : Filter() {
            override fun performFiltering(constraint: CharSequence?): FilterResults {
                val charString = constraint.toString()
                filteredList = if (charString.isEmpty()) {
                    itemList
                } else {
                    val filteredList = ArrayList<Item>()
                    for (item in itemList) {
                        if (item.name.toLowerCase().contains(charString.toLowerCase())) {
                            filteredList.add(item)
                        }
                    }
                    filteredList
                }
                val filterResults = FilterResults()
                filterResults.values = filteredList
                return filterResults
            }
            
            override fun publishResults(constraint: CharSequence?, results: FilterResults) {
                filteredList = results.values as List<Item>
                notifyDataSetChanged()
            }
        }
    }

    // 기존 어댑터 코드와 함께 검색 기능 로직 추가
}
  1. 액티비티 또는 프래그먼트에서 검색 기능 연동: 액티비티나 프래그먼트에서 검색 창을 제공하고, 사용자 입력에 따라 어댑터의 Filter를 호출하여 검색 결과를 업데이트합니다.

예시 코드:

val adapter = ItemAdapter(itemList)
val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
recyclerView.adapter = adapter

val searchView: SearchView = findViewById(R.id.searchView)
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
    override fun onQueryTextSubmit(query: String?): Boolean {
        return false
    }

    override fun onQueryTextChange(newText: String?): Boolean {
        adapter.filter.filter(newText)
        return true
    }
})

마치며

이제 리사이클러뷰에 검색 기능이 추가된 안드로이드 앱을 만들었습니다. 검색 기능을 통해 사용자가 편리하게 데이터를 찾을 수 있게 되었습니다. 코드를 따라 작성하여 검색 기능을 갖춘 리사이클러뷰를 만들어 보시기 바랍니다. 감사합니다.


참고 문서: