[kotlin] 코틀린 안드로이드에서 리사이클러뷰에 검색 기능 추가하기
안녕하세요! 안드로이드 앱을 개발하는데 리사이클러뷰에 검색 기능을 추가하고자 하는 경우가 있을 것입니다. 이 블로그 포스트에서는 코틀린으로 안드로이드 앱을 개발하면서 리사이클러뷰에 간단하게 검색 기능을 추가하는 방법을 살펴보겠습니다.
구현 단계
- 데이터 모델 클래스 작성: 먼저 리사이클러뷰에 표시될 데이터 모델 클래스를 작성합니다.
예시 코드:
data class Item(val name: String)
- 리사이클러뷰 어댑터 작성: 검색 기능을 추가하기 위해 기존의 리사이클러뷰 어댑터를 수정하거나 새로운 어댑터를 작성합니다.
예시 코드:
class ItemAdapter(private var itemList: List<Item>) : RecyclerView.Adapter<ItemAdapter.ViewHolder>() {
// 어댑터 코드 작성
}
- 검색 기능 추가: 검색 기능을 추가하기 위해
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()
}
}
}
// 기존 어댑터 코드와 함께 검색 기능 로직 추가
}
- 액티비티 또는 프래그먼트에서 검색 기능 연동: 액티비티나 프래그먼트에서 검색 창을 제공하고, 사용자 입력에 따라 어댑터의
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
}
})
마치며
이제 리사이클러뷰에 검색 기능이 추가된 안드로이드 앱을 만들었습니다. 검색 기능을 통해 사용자가 편리하게 데이터를 찾을 수 있게 되었습니다. 코드를 따라 작성하여 검색 기능을 갖춘 리사이클러뷰를 만들어 보시기 바랍니다. 감사합니다.
참고 문서: