筛选Kotlin中的SearchView

时间:2019-04-05 14:14:30

标签: android kotlin filter android-arrayadapter searchview

Android环境

kotlin_version ='1.3.20'
compileSdkVersion 28

我有一个类型为 ArrayAdapter 适配器,在应用程序活动中表示为 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 ()正常工作,甚至适配器也正常工作,但是我无法使过滤器正常工作。

3 个答案:

答案 0 :(得分:0)

添加此行

adapter.notifyDataSetChanged()

在filter语句之后。

答案 1 :(得分:0)

通知适配器以进行数据更改:

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
                }

            })

答案 2 :(得分:-1)

解决方案

这个问题的解决方案是在代码范围定义本身中。对于可能偶然遇到类似情况的人们,请确保检查 searchView.setOnQueryTextListener()并确保将其排除在可能用于填充适配器列表的任何循环之外。 :)