SearchView отменяется при изменении страницы, но не очищается должным образом - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть фрагмент пейджер, который страницы между экземплярами одного и того же Fragment.Помимо этих фрагментов, функция поиска реализована через SearchView на панели приложений.Пользователь должен иметь возможность искать индивидуально в каждом из этих фрагментов.

Функция поиска фильтрует ArrayList, который отображает текущие элементы.Большинство функций фильтра поиска работают должным образом, но я сталкиваюсь с этой проблемой:

Когда пользователь выполняет поиск, а затем переходит на следующую страницу, панель поиска (как и ожидалось) исчезает, но клавиатура остаетсяна экране.Это означает, что поиск не был правильно очищен и отменен.Возвращение к предыдущему виду также показывает, что фильтр все еще активен.Пользователю необходимо перезапустить процесс поиска и затем отменить его, чтобы снова правильно просмотреть список.

Проблема продемонстрирована в этом видео .

Какие способы обойтиЭта проблема?В настоящее время я думаю о двух вариантах:

1 - при смене страницы, очистите функцию поиска

Это работает, но не избавляется автоматически отклавиатура и не решает другие проблемы, такие как переключение на другую Activity во время поиска.

2 - выяснить способ уведомления об отмене поиска

Это было бы оптимальным способом, но я не понял, как это сделать.К сожалению, SearchView OnCloseListener реагирует только на обычный способ закрытия SearchView, поэтому я не могу его использовать.

Заранее спасибо за вашу помощь, я с нетерпением ждуваши предложения.

1 Ответ

0 голосов
/ 02 января 2019

Так что я не нашел исправления, но мне удалось получить событие, когда представление отменяется.Я получаю событие, когда выпадающий или присоединенный выпадающий список поиска добавляется OnAttachStateChangeListener, как предложено https://stackoverflow.com/a/24573266/4442731.

Таким образом, я могу очистить примененный поиск, когда представление отменено.Это, к счастью, также не очищает вид, когда поиск введен правильно!Он вызывается только тогда, когда SearchView правильно покидает вид.

searchView.addOnAttachStateChangeListener(object: View.OnAttachStateChangeListener {
    override fun onViewAttachedToWindow(p0: View?) {
        // the view was expanded
    }

    override fun onViewDetachedFromWindow(p0: View?) {
        // the view was collapsed
        searchView.clearFocus()
        DataManager.clearSearch()
    }
})
...