Kotlin 中 SearchView 的过滤器
Filter for SearchView in Kotlin
Android环境
kotlin_version = '1.3.20'
compileSdkVersion 28
我有一个类型为 ArrayAdapter 的 adapter,表示为 ListView在应用中 activity。如何让 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 工作正常,但我无法让过滤器工作.
添加这一行
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() 并确保将其排除在您可能用于喂养的任何循环之外适配器列表。 :)
Android环境
kotlin_version = '1.3.20'
compileSdkVersion 28
我有一个类型为 ArrayAdapter
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 工作正常,但我无法让过滤器工作.
添加这一行
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() 并确保将其排除在您可能用于喂养的任何循环之外适配器列表。 :)