Ни один из других ответов не работал для меня в SearchView
, я наконец-то закончил с переопределением метода dispatchKeyEventPreIme(...)
в моем пользовательском представлении:
class ImeAwareSearchView @JvmOverloads constructor(
context: Context?,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : SearchView(context, attrs, defStyleAttr) {
var onKeyEventPreImeListener: OnKeyEventPreImeListener? = null
override fun dispatchKeyEventPreIme(event: KeyEvent?): Boolean {
onKeyEventPreImeListener?.onPreImeKeyEvent()
return false
}
}
Слушатель выглядит так:
interface OnKeyEventPreImeListener {
fun onPreImeKeyEvent()
}
И я устанавливаю его во Fragment, чтобы скрыть строку поиска:
search_input.onKeyEventPreImeListener = object: OnKeyEventPreImeListener {
override fun onPreImeKeyEvent() {
hideSearchRow()
}
}
Обратите внимание, что метод dispatchKeyEventPreIme(...)
вызывается дважды, поэтому убедитесь, что вы не выполняетеперсонал на мероприятии также дважды.