Skip to content

Instantly share code, notes, and snippets.

@siifii
Created February 25, 2020 13:17
Show Gist options
  • Save siifii/374d0f8e5657a9949f50ff6b9ee2e975 to your computer and use it in GitHub Desktop.
Save siifii/374d0f8e5657a9949f50ff6b9ee2e975 to your computer and use it in GitHub Desktop.
Filterable & Searchable Recyclerview.
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String): Boolean {
adapter.filter.filter(newText)
return false
}
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
})
class SubActivityListAdapter : RecyclerView.Adapter<SubActivityListAdapter.ActivityHolder>(), Filterable {
var mOriginalArrayList: ArrayList<YourItem> = ArrayList()
var mFilteredList: ArrayList<YourItem> = ArrayList()
fun addList(items: ArrayList<YourItem>) {
this.mOriginalArrayList = items
this.mFilteredList = items
notifyDataSetChanged()
}
private fun addFilteredList(items: ArrayList<YourItem>) {
mFilteredList = items
notifyDataSetChanged()
}
private val mFiler: Filter = object : Filter() {
override fun performFiltering(constraint: CharSequence): FilterResults {
val filteredList: ArrayList<YourItem?> = ArrayList()
if (constraint.isEmpty()) {
filteredList.addAll(mOriginalArrayList)
} else {
val filterPattern = constraint.toString().toLowerCase().trim { it <= ' ' }
for (item in mOriginalArrayList) {
if (item.name?.toLowerCase()!!.contains(filterPattern)) {
filteredList.add(item)
}
}
}
val results = FilterResults()
results.values = filteredList
return results
}
override fun publishResults(constraint: CharSequence, results: FilterResults) {
addFilteredList(results.values as ArrayList<YourItem>)
}
}
override fun getFilter(): Filter = mFiler
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment