Фильтр для SearchView в Котлине - PullRequest
2 голосов
/ 05 апреля 2019

среда 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 голосов
/ 05 апреля 2019

Уведомить адаптер об изменении данных:

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
                }

            })
0 голосов
/ 05 апреля 2019

Решение

Решение этой проблемы было, скорее, в самом определении области кода. Для людей, которые могут столкнуться с подобной ситуацией, пожалуйста, проверьте searchView.setOnQueryTextListener () и не допускайте его в любых циклах, которые вы могли бы использовать для подачи списка для адаптера. :)

0 голосов
/ 05 апреля 2019

Добавить эту строку

adapter.notifyDataSetChanged()

После оператора фильтра.

...