Kotlin 中 SearchView 的过滤器

Filter for SearchView in Kotlin

Android环境

kotlin_version = '1.3.20'
compileSdkVersion 28

我有一个类型为 ArrayAdapteradapter,表示为 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() 并确保将其排除在您可能用于喂养的任何循环之外适配器列表。 :)