Android环境 kotlin_version ='1.3.20' compileSdkVersion 28
我有一个ArrayAdapter <String>类型的适配器,在app活动中表示为ListView。如何让SearchView的过滤器工作?
Activity.xml
<android.support.v7.widget.SearchView
android:id="@+id/searchView">
...
</android.support.v7.widget.SearchView>
<ListView
android:id="@+id/listView"
...
/>
Activity.kt
...
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String): Boolean {
adapter.filter.filter(newText)
return true
}
override fun onQueryTextSubmit(query: String): Boolean {
// task HERE
return false
}
})
...
所以setOnQueryTextListener()正在工作,甚至适配器工作正常,但我无法让过滤器工作。
添加此行
adapter.notifyDataSetChanged()
过滤语句后。
通知适配器数据更改:
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String): Boolean {
adapter.filter.filter(newText)
adapter.notifyDataSetChanged()
return true
}
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
})
解
这个问题的解决方案更多的是代码范围定义本身。对于可能遇到类似情况的人,请确保检查searchView.setOnQueryTextListener()并确保将其保留在您可能用于为适配器提供列表的任何循环中。 :)