在Kotlin中过滤SearchView

问题描述 投票:2回答:3

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()正在工作,甚至适配器工作正常,但我无法让过滤器工作。

android kotlin filter android-arrayadapter searchview
3个回答
0
投票

添加此行

adapter.notifyDataSetChanged()

过滤语句后。


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
                }

            })

-1
投票

这个问题的解决方案更多的是代码范围定义本身。对于可能遇到类似情况的人,请确保检查searchView.setOnQueryTextListener()并确保将其保留在您可能用于为适配器提供列表的任何循环中。 :)

© www.soinside.com 2019 - 2024. All rights reserved.