set new filter for listadapter android code example
Example 1: android listview search filter custom adapter kotlin
override fun getFilter(): Filter {
return object : Filter() {
override fun publishResults(charSequence: CharSequence?, filterResults: Filter.FilterResults) {
mPois = filterResults.values as List<PoiDao>
notifyDataSetChanged()
}
override fun performFiltering(charSequence: CharSequence?): Filter.FilterResults {
val queryString = charSequence?.toString()?.toLowerCase()
val filterResults = Filter.FilterResults()
filterResults.values = if (queryString==null || queryString.isEmpty())
allPois
else
allPois.filter {
it.name.toLowerCase().contains(queryString) ||
it.city.toLowerCase().contains(queryString) ||
it.category_name.toLowerCase().contains(queryString)
}
return filterResults
}
}
}
Example 2: android listview search filter custom adapter kotlin
inner class PoiAdapter(context: Context, @LayoutRes private val layoutResource: Int, private val allPois: List<PoiDao>):
ArrayAdapter<PoiDao>(context, layoutResource, allPois),
Filterable {
private var mPois: List<PoiDao> = allPois
override fun getCount(): Int {
return mPois.size
}
override fun getItem(p0: Int): PoiDao? {
return mPois.get(p0)
}
override fun getItemId(p0: Int): Long {
return mPois.get(p0).id.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val view: TextView = convertView as TextView? ?: LayoutInflater.from(context).inflate(layoutResource, parent, false) as TextView
view.text = "${mPois[position].name} ${mPois[position].city} (${mPois[position].category_name})"
return view
}
override fun getFilter(): Filter {
}
}
Example 3: android listview search filter custom adapter kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val poisArray = listOf(
)
val adapter = PoiAdapter(this, android.R.layout.simple_list_item_1, poisArray)
autoCompleteTextView.setAdapter(adapter)
autoCompleteTextView.threshold = 3
autoCompleteTextView.setOnItemClickListener() { parent, _, position, id ->
val selectedPoi = parent.adapter.getItem(position) as PoiDao?
autoCompleteTextView.setText(selectedPoi?.name)
}
}
Example 4: android listview search filter custom adapter kotlin
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent" android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="32sp"
android:textAlignment="center"/>
<AutoCompleteTextView
android:layout_marginTop="32dip"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:id="@+id/autoCompleteTextView"/>
</LinearLayout>